“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 installpip install packagename.tar.gz 来自 https://pip.pypa.io/en/stable/reference/pip_install/#examples 中的示例 #7

这两种方式是否有区别。

【问题讨论】:

使用pip。你可以用它卸载包。 “来自源”,如“VCS 结帐”,或如sdist? 什么是“最好的”取决于您的要求!您是否尝试过这些解决方案中的任何一个,但都以某种方式失败了?或者您是在问这些方法之间的区别是什么 在fedora上,例如,使用yum 【参考方案1】:

从表面上看,两者都做同样的事情:python setup.py installpip 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 OX

pip 本身并不需要教程。 90% 的情况下,您真正​​需要的唯一命令是 pip install <PACKAGE-NAME>。也就是说,如果您有兴趣了解更多关于您可以使用 pip 做什么的详细信息,请参阅:

Quickstart guide Official documentation。

通常还建议您将 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 出错

Python setup.py install 指定 extras_require

ImportError: No module... 在 python setup.py install 之后

运行命令 python setup.py install 总是出现下面错误是怎么回事?

“python setup.py install”和“pip install”之间的区别

运行命令 python setup.py install 总是出现下面错误(见截图)