一尘不染

Python-为什么要在easy_install上使用pip?

python

为什么要在easy_install上使用pip?难道不是PyPI和程序包作者最主要的原因吗?如果作者将废话源tarball(例如:丢失的文件,没有setup.py)上传到PyPI,则pip和easy_install都会失败。除了外观上的差异外,为什么Python的人(如上述推文中)似乎强烈青睐pip而不是easy_install

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


阅读 342

收藏
2020-02-13

共2个答案

一尘不染

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

现在,二进制程序包以轮子(.whl文件)的形式分发-不仅在PyPI上,而且在第三方存储库中,例如Christoph Gohlke的Windows Extension Packages。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打包用户指南》已取代了有关安装,使用和构建软件包的各种文档的不完整之处。Python自己的有关安装Python模块的文档现在遵照该用户指南,并明确地pip称为“首选安装程序”。
pip这些年来,还添加了其他新功能,这些功能将永远不会存在easy_install。例如,pip通过构建需求文件,然后在每一侧使用单个命令安装它,可以轻松克隆站点程序包。或将你的需求文件转换为本地回购以用于内部开发。等等。

我知道easy_install在2015年使用的唯一好的理由是在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如果要升级。

2020-02-13
一尘不染

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

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