协慌网

登录 贡献 社区

为什么要使用 pip 而不是 easy_install?

推文内容如下:

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

为什么要使用 pip 而不是 easy_install?问题不在于 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 仓库等安装 - 的情况都很久了; 你可以pip install .pip install git+https://
  • pip附带来自 python.org 的官方 Python 2.7 和 3.4 + 软件包,如果你从 source 构建,默认包含一个pip引导程序。
  • 有关安装,使用和构建软件包的各种不完整文档已被 “ Python 打包用户指南”取代。 Python 自己的安装 Python 模块文档现在遵循本用户指南,并明确地将pip称为 “首选安装程序”。
  • 其他新功能已经添加到pip多年来永远不会在easy_install 。例如, pip可以通过构建需求文件然后在每一侧使用单个命令安装它来轻松克隆您的站点包。或者将您的需求文件转换为本地仓库以用于内部开发。等等。

我知道在 2015 年使用easy_install的唯一原因是使用 Apple 预装的 Python 版本与 OS X 10.5-10.8 的特殊情况。自 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

另一个 - 因为尚未提及 - 支持pip的原因是因为它是新的热点并将继续在未来使用。

下面的信息图 - 来自The Hitchhiker's Guide to Packaging v1.0 中当前包装状态部分 - 显示 setuptools / easy_install 将来会消失。

在此输入图像描述

这是来自distribute 文档的另一个信息图,显示Setuptools和 easy_install 将被新的 hotness- distributepip取代。虽然pip仍然是新的热点 ,但随着Setuptools v0.7 的发布, Distribute在 2013 年与Setuptools合并。

在此输入图像描述