为什么选择pip而不是easy_install?

977 投票
9 回答
242418 浏览
提问于 2025-04-16 01:06

有一条推文是这么说的:

别用 easy_install,除非你喜欢自虐。用 pip。

那么,为什么大家更喜欢用 pip 而不是 easy_install 呢?难道问题不主要出在 PyPI 和包的作者身上吗?如果一个作者上传了糟糕的源代码压缩包(比如:缺少文件,或者没有 setup.py)到 PyPI,那么无论是 pip 还是 easy_install 都会失败。除了外观上的差别,为什么像上面那条推文中的 Python 用户似乎非常偏爱 pip 而不是 easy_install 呢?

(我们假设这里说的是由社区维护的 Distribute 包中的 easy_install)

9 个回答

250

还有一个没提到的原因,为什么大家推荐用 pip,就是因为它是现在的热门工具,并且将来也会继续被使用。

下面的这个信息图来自于 当前打包状态部分,出现在 打包指南 v1.0中,显示了 setuptools 和 easy_install 在未来会被淘汰。

enter image description here

这是另一个来自 distribute 文档的信息图,展示了 Setuptools 和 easy_install 将会被新的热门工具——distributepip 取代。虽然 pip 现在是热门工具,但 Distribute 在2013年与 Setuptools 合并,发布了 Setuptools v0.7。

enter image description here

608

这是Ian Bicking自己对pip的介绍:

pip最初是为了在以下几个方面改进easy_install而写的:

  • 所有的包在安装之前都会被下载完成。这样就不会出现安装一半就停止的情况。
  • 在控制台上会显示有用的信息。
  • 会记录下操作的原因。例如,如果正在安装一个包,pip会记录下为什么需要这个包。
  • 错误信息应该是有帮助的。
  • 代码相对简洁且一致,这样在编程时更容易使用。
  • 包不一定要以egg格式安装,可以直接安装(同时保留egg的元数据)。
  • 原生支持其他版本控制系统(比如Git、Mercurial和Bazaar)。
  • 可以卸载包。
  • 简单定义固定的需求集合,并可靠地重现一组包。
319

这里的很多回答在2015年已经过时了(不过最初被接受的那个来自Daniel Roseman的回答除外)。下面是目前的情况:

  • 现在的二进制包以轮子(.whl文件)的形式分发,不仅在PyPI上,还有像Christoph Gohlke的Windows扩展包这样的第三方库。pip可以处理这些轮子,而easy_install则不行。
  • 虚拟环境(Python 3.4自带,或者可以通过virtualenv添加到2.6+/3.1+版本)已经成为一个非常重要的工具(在官方文档中推荐使用);它们自带pip,但和easy_install配合使用时效果不好。
  • 包含easy_installdistribute包现在不再维护。它对setuptools的改进已经合并回setuptools中。尝试安装distribute只会安装setuptools
  • easy_install本身的维护也只是勉强维持。
  • 以前pip在某些情况下不如easy_install(比如从解压的源代码树或版本控制系统仓库安装)的问题现在都不存在了;你可以直接用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的苹果预装Python版本的特殊情况。从10.5开始,苹果就包含了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

撰写回答