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

时间:2010-07-10 18:35:55

标签: python pip setuptools easy-install pypi

tweet读取:

  

除非你,否则不要使用easy_install   就像刺伤自己的脸一样。   使用点子。

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

(假设我们正在讨论来自Distribute软件包的easy_install,由社区维护)

9 个答案:

答案 0 :(得分:591)

来自Ian Bicking自己的introduction to pip

  

pip最初用以下列方式改进easy_install

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

答案 1 :(得分:293)

这里的许多答案都是2015年的过时(虽然the initially accepted one from Daniel Roseman不是)。这是目前的状况:

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

我知道在2015年使用pip的唯一原因是使用Apple预装的Python版本与OS X 10.5-10.8的特殊情况。自10.5以来,Apple已包含easy_install,但截至10.10,它们仍未包含easy_install。使用10.9+时,您仍然应该使用pip,但对于10.5-10.8,这有一些问题,因此get-pip.py更容易。 (一般来说,sudo easy_install pip是一个坏主意;只有OS X 10.5-10.8才能这样做。)另外,10.5-10.8以easy_install pip的方式包含readline知道如何克服,但easy_install没有,所以如果你想升级它,你也想pip

答案 2 :(得分:244)

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

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

enter image description here

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

enter image description here

答案 3 :(得分:168)

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

  1. pip提供uninstall命令

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

答案 4 :(得分:114)

要求文件。

说真的,我每天都会和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

任何时候你都可以像这样自动化单调乏味。

答案 5 :(得分:80)

pip不会安装二进制包,也没有经过Windows测试。

由于Windows默认情况下没有编译器,因此通常不能使用。 easy_install 可以为Windows安装二进制包。

答案 6 :(得分:72)

更新:setuptools吸收了distribute而不是相反,正如一些人所想的那样。 setuptools与最新的distutils更改和轮式格式保持同步。因此,easy_installpip或多或少现在处于平等地位。

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

答案 7 :(得分:23)

作为模糊人回复的补充:

  

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制造轮子,去年夏天我就这样做了。效果很棒!

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

答案 8 :(得分:3)

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

对于包GitPythonpip中的版本太旧,0.1.7,而来自easy_install的版本是0.3.2.rc1的最新版本Python 2.7.8 }。

我正在使用easy_install。我不确定pipeasy_install的底层机制,但至少某些软件包的版本可能彼此不同,有时easy_install GitPython 是更新版本的版本

{{1}}