“python setup.py install”和“pip install”之间的区别
Posted
技术标签:
【中文标题】“python setup.py install”和“pip install”之间的区别【英文标题】:Difference between 'python setup.py install' and 'pip install' 【发布时间】:2013-03-21 09:14:42 【问题描述】:我有一个外部包,我想从一个 tar 文件安装到我的 python virtualenv 中。 安装包的最佳方式是什么?
我发现了两种方法:
-
解压 tar 文件,然后在解压后的目录中运行
python setup.py install
。
pip install packagename.tar.gz
来自 https://pip.pypa.io/en/stable/reference/pip_install/#examples 中的示例 #7
这两种方式是否有区别。
【问题讨论】:
使用pip
。你可以用它卸载包。
“来自源”,如“VCS 结帐”,或如sdist
?
什么是“最好的”取决于您的要求!您是否尝试过这些解决方案中的任何一个,但都以某种方式失败了?或者您是在问这些方法之间的区别是什么?
在fedora上,例如,使用yum
。
【参考方案1】:
从表面上看,两者都做同样的事情:python setup.py install
或 pip install <PACKAGE-NAME>
都会为您安装 python 包,并且不会大惊小怪。
但是,使用 pip 提供了一些额外的优势,使其更易于使用。
pip 会自动为你下载一个包的所有依赖。相比之下,如果您使用setup.py
,则通常需要手动搜索并下载依赖项,这很繁琐,而且可能会令人沮丧。
pip 跟踪各种元数据,使您可以使用单个命令轻松卸载和更新软件包:pip uninstall <PACKAGE-NAME>
和pip install --upgrade <PACKAGE-NAME>
。相反,如果您使用setup.py
安装包,如果您想摆脱它,则必须手动删除和维护一个包,这可能容易出错。
您不再需要手动下载文件。如果你使用setup.py
,你必须访问图书馆的网站,弄清楚在哪里下载它,解压文件,运行setup.py
...相反,pip会自动搜索Python Package Index(PyPi)看看是否该软件包存在于那里,并且会自动为您下载、解压缩和安装该软件包。除了少数例外,几乎每一个真正有用的 Python 库都可以在 PyPi 上找到。
pip 会让你easily install ***,这是 Python 分发的新标准。 More info about wheels。
pip 提供了与使用 virtualenv
很好地集成的额外好处,这是一个程序,可让您在计算机上运行多个需要冲突库和 Python 版本的项目。 More info。
在 Python 2.x 系列的 Python 2.7.9 和 Python 3.x 系列的 Python 3.4.0 开始,pip 默认与 Python 捆绑在一起,使其更易于使用。
所以基本上,使用 pip。它仅提供了对使用 python setup.py install
的改进。
如果您使用的是旧版本的 Python,无法升级,并且没有安装 pip,您可以在以下链接中找到有关安装 pip 的更多信息:
Official instructions on installing pip for all operating systems Instructions on installing pip on Windows (including solutions to common problems) Instructions on installing pip for Mac OXpip 本身并不需要教程。 90% 的情况下,您真正需要的唯一命令是 pip install <PACKAGE-NAME>
。也就是说,如果您有兴趣了解更多关于您可以使用 pip 做什么的详细信息,请参阅:
通常还建议您将 pip 和 virtualenv 一起使用。如果你是 Python 的初学者,我个人认为从使用 pip 开始并在全局范围内安装包是很好的,但最终我认为你应该在处理更严肃的项目时过渡到使用 virtualenv。
如果您想了解更多关于同时使用 pip 和 virtualenv 的信息,请参阅:
Why you should be using pip and virtualenv A non-magical introduction to Pip and Virtualenv for Python beginners Virtual Environments【讨论】:
pip install 是否在内部调用 setup.py 文件? @variable, pip install from "wheels", 预编译包, 没有, pip install from source: 见pip install build system interface 根据我的经验,python setup.py install
也会下载和安装依赖项。自您在 2013 年撰写此答案以来,这是一个变化吗?
@KenWilliams 即使python setup.py install
现在也可以下载并安装依赖项,pip install .
是更好的选择。对于setup.py install
可以在安装时选择预发布版本,这不是您大部分时间想要的。见this【参考方案2】:
python setup.py install
类似于 make install:它是一种将文件编译和复制到目标目录的受限方式。这并不意味着它是真正在您的系统上安装软件的最佳方式。
pip
是一个包管理器,它可以安装、升级、列出和卸载包,就像熟悉的包管理器包括:dpkg, apt, yum, urpmi, ports
等。在后台,它将运行python setup.py install
,但有特定的选项来控制最终安装的方式和位置。
总结:使用pip
。
【讨论】:
【参考方案3】:问题是关于安装包含 python 包的本地 tarball 的首选方法,不是关于将包上传到PyPi 等索引服务。
恐怕我知道一些软件分销商不会将他们的包上传到 PyPi,而是要求开发人员从他们的网站下载包并安装。
python setup.py 安装
这可以工作,但不推荐。无需解开 tarball 文件并进入其中运行 setup.py 文件。
pip install ../path/to/packagename.tar.gz
这是设计和首选的方式。简洁并与 PyPi 风格的包保持一致。
更多关于pip install
的信息可以在这里找到:https://pip.readthedocs.io/en/stable/reference/pip_install/
【讨论】:
我们可以使用 pip install -e 吗?以上是关于“python setup.py install”和“pip install”之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
Python setup.py install 指定 extras_require
ImportError: No module... 在 python setup.py install 之后
运行命令 python setup.py install 总是出现下面错误是怎么回事?