ChatGPT解决这个技术问题 Extra ChatGPT

为什么使用 pip 而不是 easy_install?

tweet 内容如下:

不要使用easy_install,除非你喜欢刺伤自己的脸。使用点子。

为什么使用 pip 而不是 easy_install? fault lie with PyPI and package authors mostly 不是吗?如果作者将垃圾源 tarball(例如:缺少文件,没有 setup.py)上传到 PyPI,那么 pip 和 easy_install 都会失败。除了外观上的差异,为什么 Python 人(如上面的推文)似乎强烈更喜欢 pip 而不是 easy_install?

(假设我们谈论的是来自社区维护的 Distribute 包中的 easy_install)

在我看到这个问题之前,我回答了一个不相关的问题,说“不要使用 easy_install,使用 pip”。现在我想知道我为什么这么说...
我仍然遇到导致 pip 失败的包,但 easy_install 处理得很好,所以我对此也很好奇。
pyobjc-core 是一个适用于 easy_install 但不适用于 pip 的包的示例。
四年后回到 python,包装的状态简直一团糟。现在是 2014 年,情况只会变得更糟。据我了解 setuptools absorbed distutils,尽管官方 python 文档对此是 oblivious,但 going to be part of python 3 也不是,并且 pip 像第三个轮子一样徘徊(双关语)。
@drozzy:你碰巧在最糟糕的时候回来了——就在一群核心开发人员认为事情变得如此混乱以至于他们不得不参与解决问题之后。 setuptools 不是 Python 3 的一部分,因为 pip 是,而且这是最终用户唯一需要的部分。 (想要在 PyPI 上分发的开发人员显然可以pip install setuptools,以及他们可能想要的一切。)

C
Community

来自 Ian Bicking 自己的introduction to pip

pip 最初是为了通过以下方式改进 easy_install 而编写的。所有软件包在安装前都已下载。结果不会发生部分完成的安装。注意在控制台上显示有用的输出。对采取行动的原因进行跟踪。例如,如果正在安装一个包,pip 会跟踪为什么需要该包。错误消息应该很有用。代码相对简洁和有凝聚力,使其更易于以编程方式使用。软件包不必安装为 egg 档案,它们可以平面安装(同时保留 egg 元数据)。对其他版本控制系统(Git、Mercurial 和 Bazaar)的本机支持 卸载软件包。轻松定义固定的需求集并可靠地复制一组包。


“错误消息”的优势是巨大的,尤其是对于新用户。 Easy-install 以吐出数十个看似致命的错误而闻名,但最终还是成功地完成了安装,这使得它很难使用,直到你学会忽略它所说的大部分内容。皮普一开始只是省略了这些事情。
@Glyph 使用 easy_install pip 比使用 sudo apt-get install python-pip 有优势吗?
不要在基于包的发行版上的 virtualenv 之外使用 easy_install:workaround.org/easy-install-debian
@Dennis:使用 sudo apt-get 时,Ubuntu/Debian 将在 /usr/lib/python/dist-packages 中安装 Python 软件包,而 sudo pipsudo easy_install 将在 /local/lib/python/site-packages 中安装,不幸的是,Debian/Ubuntu 软件包通常有不同的名称,pip 并不熟悉和。恕我直言,最好的解决方案是在那里使用 virtualenv 和 pip 安装你的包。
这需要更新。
C
Community

这里的许多答案在 2015 年都已过时(尽管 the initially accepted one from Daniel Roseman 不是)。这是目前的情况:

二进制包现在以轮子(.whl 文件)的形式分发——不仅在 PyPI 上,而且在第三方存储库中,如 Christoph Gohlke 的 Windows 扩展包。 pip 可以处理轮子; easy_install 不能。

虚拟环境(3.4 内置,或者可以通过 virtualenv 添加到 2.6+/3.1+)已经成为一个非常重要和突出的工具(并在官方文档中推荐);它们包括开箱即用的 pip,但甚至不能与 easy_install 一起正常工作。

不再维护包含 easy_install 的分发包。它对 setuptools 的改进已合并回 setuptools。尝试安装分发只会安装 setuptools。

easy_install 本身只是准维护的。

所有 pip 曾经不如 easy_install 的情况——从解压的源代码树、从 DVCS 存储库等进行安装——都已不复存在。你可以 pip install ., pip install git+https://。

pip 附带来自 python.org 的官方 Python 2.7 和 3.4+ 包,如果您从源代码构建,则默认包含 pip 引导程序。

关于安装、使用和构建包的各种不完整的文档已被 Python 打包用户指南取代。 Python 自己的关于安装 Python 模块的文档现在遵循此用户指南,并明确将 pip 称为“首选安装程序”。

多年来,pip 中添加了其他新功能,这些新功能永远不会出现在 easy_install 中。例如,pip 通过构建需求文件,然后在每一侧使用单个命令安装它,可以轻松克隆您的站点包。或者将您的需求文件转换为本地存储库以用于内部开发。等等。

我知道在 2015 年使用 easy_install 的唯一充分理由是在 OS X 10.5-10.8 中使用 Apple 预装的 Python 版本的特殊情况。自 10.5 起,Apple 已包含 easy_install,但截至 10.10,它们仍不包含 pip。对于 10.9+,您仍然应该只使用 get-pip.py,但对于 10.5-10.8,这会出现一些问题,因此使用 sudo easy_install pip 会更容易。 (一般来说,easy_install pip 是个坏主意;它只适用于 OS X 10.5-10.8。)此外,10.5-10.8 包含 readlineeasy_install 知道如何凑合,但pip 没有,因此如果您想升级它,还需要 sudo easy_install readline


@drozzy:也许吧。但考虑到再过 5 年,我的答案将和其他所有答案一样过时,而丹尼尔·罗斯曼的答案是永恒的。此外,如果我的答案不能依靠指向一个 5 年前已被接受的答案来证明 为什么 Python 社区在此期间落后于 pip,那么我的答案也不会那么好。
值得注意的是,一些打包版本的 pip 存在错误,并且 pip 无法自行升级。无论您是否认为它具有讽刺意味,在这些情况下,最简单的解决方案是执行 easy_install -U pipeasy_install3 -U pip
“但甚至不能与 easy_install 一起正常工作”这不是我的经验,虽然我已经有一段时间没有尝试过了,因为轮子现在占主导地位。但 Christoph Gohlke 的二进制文件过去是作为可执行的鸡蛋分发的。对它们调用 easy_install 是我可以将这些软件包安装到虚拟环境的唯一方法,而且它从来没有让我感到胃痛。 easy_install 以何种方式不再适用于虚拟环境?
“准维护”部分需要引用。否则,很好的答案
G
Gulzar

另一个(目前尚未提及)偏爱 pip 的原因是因为它是 热点,并且将在未来继续使用。

下面的信息图(来自 The Hitchhiker's Guide to Packaging v1.0 中的 Current State of Packaging 部分)显示 setuptools/easy_install 将在未来消失。

https://i.stack.imgur.com/2icn1.jpg

这是来自 distribute's documentation 的另一张信息图,显示 Setuptools 和 easy_install 将被新的热点所取代 - distributepip。虽然 pip 仍然是新的热点,但 Distribute 在 2013 年与 Setuptools 合并,发布了 Setuptools v0.7。

https://i.stack.imgur.com/RdBpi.png


信息图表 FTW
OTOH,第二张图已经过时一年了。 Distribute 将终止并被 distutils2 取代(它也将在 Python 3.3 开始的标准库中)。一个名为 pysetup 的基本安装程序作为 part 或 distutils2 提供,pip 将来会在 distutils2 之上继续提供附加功能。
天哪,非常感谢。多年来,我一直对 python 打包感到困惑,看到一条半权威的前进道路令人振奋。
这个“答案”太过时了,而且是错误的,甚至都不好笑。
N
Ned Batchelder

两个原因,可能还有更多:

如果安装过程中途失败,pip 会提供卸载命令,pip 将使您处于干净状态。


setuptools 现在也是如此。嗯……有点。 pythonhosted.org/setuptools/…
M
Matthew Schinckel

要求文件。

说真的,我每天都将它与 virtualenv 结合使用。

快速依赖管理教程,伙计们

需求文件允许您创建已通过 pip 安装的所有包的快照。通过将这些包封装在虚拟环境中,您可以让您的代码库处理一组非常特定的包,并与其他人共享该代码库。

来自 Heroku 的文档 https://devcenter.heroku.com/articles/python

您创建一个虚拟环境,并设置您的 shell 以使用它。 (bash/*nix 指令)

virtualenv env
source env/bin/activate

现在所有使用这个 shell 运行的 python 脚本都将使用这个环境的包和配置。现在你可以在本地安装一个包到这个环境,而不需要在你的机器上全局安装它。

pip install flask

现在您可以转储有关安装了哪些软件包的信息

pip freeze > requirements.txt

如果您将该文件签入版本控制,当其他人获取您的代码时,他们可以设置自己的虚拟环境并安装所有依赖项:

pip install -r requirements.txt

任何时候你都可以像这样自动化乏味的工作,这真是太棒了。


现在这似乎也是 setuptools 的一部分:pythonhosted.org/setuptools/…
您应该使用 pipreqs 来获取 requirements.txt 文件。它只会提供与您调用 pipreqs 的项目相关的库,因此 requirements.txt 将基于项目而不是 virtualenv。
f
fuzzyman

pip 不会安装二进制包,并且在 Windows 上没有经过很好的测试。

由于默认情况下 Windows 不附带编译器,因此 pip 通常不能在那里使用。 easy_install 可以为 Windows 安装二进制包。


有趣的是,我从来没有想过。 pip 也不支持至少 Zope 人员使用的 setuptools “附加”功能。
这是否表明在 Windows 上需要 gcc 环境,而不是坚持 pip 安装预构建的二进制文件?
用于 Windows 的“正确”编译器是 Visual Studio(我相信 2008 是最新版本的 Python)。安装这个,即使是免费版本,也是一件麻烦事。在 Windows 上安装 C 扩展的常规方法是使用预编译的二进制文件。 easy_install 支持这个,pip 不支持。
这是我仍然使用 easy_install 的主要原因。
自从给出上述答案以来的几年里,现在 pip 无法在 Windows 或其他平台上安装二进制包已不再是事实。 wheel 二进制分发格式使这成为可能。许多带有 C 扩展模块的第三方包现在也作为为各种平台构建的轮子分发,pip 可以自动安装它们。例如,参见 pythonwheels.com
u
user3341691

更新:setuptools 吸收了 distribute,而不是相反,正如一些人认为的那样。 setuptools 是最新的,具有最新的 distutils 更改和滚轮格式。因此,easy_installpip 现在或多或少处于平等地位。

来源:http://pythonhosted.org/setuptools/merge-faq.html#why-setuptools-and-not-distribute-or-another-name


为什么没有更多的赞成?答案太陈旧了!
是的,最重要的答案已经过时了
因此,easy_install 和 pip 现在或多或少处于平等地位 这是胡说八道。 easy_install 仍然是很长一段时间以来的样子,并且 pip 大大改进了它。 easy_install 只是 setuptools 的一部分,可以说是最糟糕的之一,这就是 pip 旨在取代它的原因。
C
Christian Tismer

作为fuzzyman回复的补充:

pip 不会安装二进制包,并且在 Windows 上没有经过很好的测试。由于默认情况下 Windows 不附带编译器,因此 pip 通常不能在那里使用。 easy_install 可以为 Windows 安装二进制包。

这是Windows上的一个技巧:

您可以使用 easy_install 安装二进制包以避免构建二进制文件

即使您使用了easy_install,您也可以使用pip uninstall

这只是一种适用于我在 Windows 上的解决方法。实际上,如果不涉及二进制文件,我总是使用 pip 。

查看当前的 pip doku:http://www.pip-installer.org/en/latest/other-tools.html#pip-compared-to-easy-install

我会在邮件列表中询问对此有何计划。

这是最新的更新:

安装二进制文件的新支持方式将是 wheel!它还没有在标准中,但几乎。当前版本仍然是 alpha:1.0.0a1

https://pypi.python.org/pypi/wheel

http://wheel.readthedocs.org/en/latest/

我将通过使用 wheel 而不是鸡蛋为 PySide 创建 OS X 安装程序来测试 wheel。会回来报告这件事。

干杯 - 克里斯

快速更新:

wheel 的过渡快要结束了。大多数软件包都支持 wheel

我答应为 PySide 制造轮子,去年夏天我做到了。效果很好!

提示:到目前为止,一些开发人员未能支持滚轮格式,仅仅是因为他们忘记将 distutils 替换为 setuptools。通常,通过替换 setup.py 中的单个词很容易转换此类包。


上面更新了-我认为等待几乎结束了;-)
我应该再次更新这个,因为轮子已成为 2014 年春季的标准。实际上,我认为不应该无限地更改这些旧线程,因为 - 旧答案非常好 - 当现实发生变化时很容易替换所有内容。但是,当一个问题的最初原因消失时,这公平吗?
L
Landys

刚遇到一种特殊情况,我必须使用easy_install而不是pip,或者我必须直接拉取源代码。

对于包 GitPythonpip 中的版本太旧,即 0.1.7,而 easy_install 中的版本是最新的 0.3.2.rc1

我正在使用 Python 2.7.8。我不确定 easy_installpip 的底层机制,但至少某些包的版本可能彼此不同,有时 easy_install 是版本较新的包。

easy_install GitPython

我现在检查了这个(见时间戳),它不再是真的:pip 和 easy_install 工作相同,导致今天的 GitPython 0.3.5。 (仅在 OS X Yosemite 上测试)。你的平台是什么?请更新您的条目,因为它现在具有误导性。
在我的电脑中,我无法使用 PIP,因为无论尝试什么设置,它仍然会引发有关代理的网络错误。我对easy_install没有任何问题