为什么要使用pip而不是easy_install?
为什么要使用pip而不是easy_install?
一段推特写道:
不要使用easy_install,除非你想在脸上自己扎刀。 使用pip。
为什么要使用pip而不是easy_install呢?难道不应该PyPI和软件包作者承担大部分责任吗?如果作者将烂掉的源程序压缩包上传到PyPI(例如,缺少文件、没有setup.py),那么pip和easy_install都会失败。除了一些样式上的差异,为什么像上面的推特中的Python人似乎强烈支持pip而不是easy_install呢?
(我们假设我们正在谈论由社区维护的Distribute软件包中的easy_install)
admin 更改状态以发布 2023年5月22日
这里的很多答案都已经过时了(虽然最初被接受的答案来自Daniel Roseman没有过时)。以下是目前的情况:
- 现在二进制包以wheels (
.whl
文件)的形式分发 - 不仅在PyPI上,还在第三方仓库中,比如Christoph Gohlke's Extension Packages for Windows。pip
可以处理wheels;easy_install
则不行。 - 虚拟环境(内置于3.4中,或者可以通过
virtualenv
添加到2.6+/3.1+中)已成为一个非常重要且突出的工具(在官方文档中推荐使用);他们里面已经内置了pip
,但是却甚至不能完全正确地与easy_install
一起工作。 distribute
包,其中包括easy_install
,已不再得到维护。 它相对于setuptools
的改进已经被合并回setuptools
中。 尝试安装distribute
将只安装setuptools
。easy_install
本身只有被类维护者维护。pip
曾经不如easy_install
的情况——从未解包的源树安装,从 DVCS repo 安装等——已经不存在了;可以pip install .
,pip install git+https://
了。pip
随Python 2.7和3.4+官方软件包一起安装,如果从源代码构建软件包,则默认包含pip
引导程序。- 有关安装,使用和构建软件包的各种不完整的文档已被Python Packaging User Guide替换。 Python自己的安装Python模块文档现在引用了此用户指南,并明确将
pip
称为“首选安装程序”。 - 在多年的发展中,
pip
还添加了其他新功能,这些功能将永远不会出现在easy_install
中。 例如,pip
使得通过构建要求文件,然后在每个环境上使用单个命令进行安装,可以轻松克隆您的site-packages。或将您的要求文件转换为本地仓库以供内部开发使用等等。
我所知道的唯一使用easy_install
的好理由是在使用OS X 10.5-10.8中的苹果预安装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
。
从 Ian Bicking 的pip介绍中可以得知:
pip 最初的目的是为了在以下几个方面改进 easy_install :
- 所有软件包在安装之前都会被下载。没有因为在安装过程中中断而导致的安装不完全的情况。
- 在控制台上以友好的方式显示信息。
- 跟踪操作的原因。例如,如果正在安装软件包,则pip 会跟踪为什么需要该软件包。
- 错误消息应当是有用的。
- 代码相对简洁而内聚,易于编程使用。
- 软件包不必作为 egg 存档安装,也可以使用扁平结构进行安装(同时保留 egg 元数据)。
- 原生支持其他版本控制系统(Git,Mercurial 和 Bazaar)
- 卸载软件包。
- 易于定义固定的需求集,并可靠地重现一组软件包。