958

一条推文写道:

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

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

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

4

9 回答 9

603

来自 Ian Bicking 自己对 pip 的介绍

pip 最初是为了通过以下方式改进easy_install 而编写的

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

这里的许多答案在 2015 年都已过时(尽管Daniel Roseman 最初接受的答案并非如此)。这是目前的情况:

  • 二进制包现在以轮子(.whl文件)的形式分发——不仅在 PyPI 上,而且在第三方存储库中,如Christoph Gohlke 的 Windows 扩展包pip可以处理轮子;easy_install不能。
  • 虚拟环境(3.4 内置,或者可以添加到 2.6+/3.1+ 中virtualenv)已经成为一个非常重要和突出的工具(并在官方文档中推荐);它们包括pip开箱即用,但甚至不能与easy_install.
  • distribute包含的软件包easy_install不再维护。它的改进setuptools被合并回setuptools. 尝试安装distribute只会安装setuptools
  • easy_install本身只是准维护。
  • 所有pip过去不如easy_install从解压缩的源代码树、从 DVCS 存储库等安装的情况都已不复存在。你可以pip install .pip install git+https://
  • pip附带来自 python.org 的官方 Python 2.7 和 3.4+ 包,pip如果您从源代码构建,则默认包含引导程序。
  • 关于安装、使用和构建包的各种不完整的文档已被Python Packaging User Guide所取代。Python 自己的关于安装 Python 模块的文档现在遵循此用户指南,并明确pip称为“首选安装程序”。
  • 多年来添加的其他新功能pip永远不会出现在easy_install. 例如,pip通过构建需求文件然后在每一侧使用单个命令安装它,可以轻松克隆您的站点包。或者将您的需求文件转换为本地存储库以用于内部开发。等等。

我知道easy_install在 2015 年使用的唯一充分理由是在 OS X 10.5-10.8 中使用 Apple 预装的 Python 版本的特殊情况。自 10.5 起,Apple 已easy_install包含pip. get-pip.py对于10.9+ ,您仍然应该使用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如果你想升级它。

于 2015-05-23T03:10:30.550 回答
249

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

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

在此处输入图像描述

这是来自分发文档的另一个信息图,显示Setuptools和 easy_install 将被新的热点取代 - <a href="http://pythonhosted.org/distribute/" rel="nofollow noreferrer">distribute 和pip。虽然pip仍然是新热点,但在 2013 年, DistributeSetuptools合并,并发布了Setuptools v0.7。

在此处输入图像描述

于 2011-01-26T15:19:54.820 回答
171

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

  1. pip 提供了一个uninstall命令

  2. 如果安装在中间失败,pip 将使您处于干净状态。

于 2010-07-10T18:56:46.120 回答
115

要求文件。

说真的,我每天都将它与 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

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

于 2010-07-11T13:28:57.433 回答
82

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

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

于 2010-07-11T18:05:17.063 回答
76

更新:正如一些人认为的那样,setuptools已经吸收distribute而不是相反。setuptools与最新的distutils变化和车轮格式保持同步。因此,easy_install现在pip或多或少处于平等地位。

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

于 2014-02-22T20:22:52.243 回答
25

作为fuzzyman回复的补充:

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

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

这是Windows上的一个技巧:

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

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

这只是一种适用于我在 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通过创建一个 OS X 安装程序PySidewheel代替鸡蛋进行测试。会回来报告这件事。

干杯 - 克里斯

快速更新:

过渡到wheel几乎结束。大多数软件包都支持wheel.

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

提示:到目前为止,一些开发人员未能支持轮格式,只是因为他们忘记替换distutilssetuptools. 通常,通过替换setup.py.

于 2012-11-27T01:39:57.857 回答
3

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

对于 packageGitPython来说,in 的版本pip太旧,即 . 0.1.7,而 fromeasy_install是最新的,即0.3.2.rc1.

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

easy_install GitPython
于 2014-09-25T03:22:52.037 回答