为什么要在 easy_install 上使用 pip?

一条推文中写道:

请勿使用 easy_install,除非您喜欢对自己的脸部进行刺伤。使用点子。

为什么要在 easy_install 上使用 pip?难道不是PyPI 和程序包作者最主要的原因吗?如果作者将废话源 tarball(例如:丢失的文件,没有 setup.py)上传到 PyPI,则 pip 和 easy_install 都会失败。除了化妆品的差异,为什么 Python 的人(如上面的鸣叫)似乎强烈支持 PIP 过的 easy_install?

(假设我们正在谈论由社区维护的 Distribute 软件包中的 easy_install)

答案

从伊恩 · 比金(Ian Bicking)自己对 pip介绍

pip 最初旨在通过以下方式对 easy_install 进行改进

  • 在安装之前,所有软件包都已下载。结果不会发生部分完成的安装。
  • 注意在控制台上显示有用的输出。
  • 采取行动的原因被跟踪。例如,如果正在安装软件包,则 pip 会跟踪为什么需要该软件包。
  • 错误消息应该很有用。
  • 该代码相对简洁明了,具有内聚性,可以更轻松地以编程方式使用。
  • 软件包不必作为 Egg 存档安装,可以将它们平放安装(同时保留 Egg 元数据)。
  • 对其他版本控制系统(Git,Mercurial 和 Bazaar)的本地支持
  • 卸载软件包。
  • 简单地定义固定的需求集并可靠地复制一组包。

这里的许多答案在 2015 年已经过时了(尽管丹尼尔 · 罗斯曼最初接受的答案不是)。这是当前的状态:

  • 现在,二进制程序包以轮子( .whl文件)的形式分发 - 不仅在 PyPI 上,而且在第三方存储库中,例如Christoph Gohlke 的 Windows 扩展包pip可以处理轮子; easy_install无法。
  • 虚拟环境(内置于 3.4 中,或者可以通过virtualenv添加到 2.6 + / 3.1 + 中)已经成为一个非常重要和突出的工具(并在官方文档中推荐);它们包括开箱即用的pip ,但甚至不能与easy_install一起正常使用。
  • 不再维护包含easy_installdistribute软件包。它对setuptools改进已合并回setuptools 。尝试安装distribute将只安装setuptools
  • easy_install本身仅是准维护的。
  • pip过去不如easy_install从未打包的源树,从 DVCS repo 等安装)的所有情况都已一去不复返了;你可以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 包含readline的方式是easy_install四处走动,而pip却不会,因此,如果您要升级它,也要使用sudo easy_install readline

另一个(至今尚未提及)之所以喜欢点子,是因为它是新的热点,并将在未来继续使用。

以下信息图表(来自《 包装 旅行者指南》 v1.0 的 “包装当前状态”部分)表明 setuptools / easy_install 将来会消失。

在此处输入图片说明

这是Distribution 文档中的另一个信息图,显示Setuptools和 easy_install 将被新的热点— distributionpip取代。尽管pip仍然是新的热点 ,但Distribute在 2013 年随Setuptools v0.7 发行版与Setuptools合并。

在此处输入图片说明

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

  1. pip 提供uninstall命令

  2. 如果中间安装失败,则 pip 将使您保持干净状态。

virtualenv env
source env/bin/activate
pip install flask
pip freeze > requirements.txt
pip install -r requirements.txt

pip 不会安装二进制软件包,并且未在 Windows 上经过良好测试。

由于 Windows 默认没有附带编译器,因此通常无法在其中使用 pip。 easy_install 可以为 Windows 安装二进制软件包。

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

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

除了模糊人的答复:

pip 不会安装二进制软件包,并且未在 Windows 上经过良好测试。

由于 Windows 默认没有附带编译器,因此通常无法在其中使用 pip。 easy_install 可以为 Windows 安装二进制软件包。

这是 Windows 上的一个技巧:

  • 您可以使用easy_install <package>安装二进制软件包,以避免构建二进制文件

  • 即使您使用了 easy_install,也可以使用pip uninstall <package>

这只是在 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制造轮子,去年夏天我做到了。很棒!

提示:到目前为止,一些开发人员未能支持 wheel 格式,这仅仅是因为他们忘记了用setuptools代替distutils 。通常,通过替换setup.py单个单词来转换此类软件包很容易。

easy_install GitPython