为什么要在easy_install上使用pip?[关闭]


936

一条推文中写道:

不要使用easy_install,除非您喜欢对自己的脸部进行刺伤。使用点子。

为什么要在easy_install上使用pip?难道不是PyPI和程序包作者最主要的原因吗?如果作者将废话源tarball(例如:缺少文件,没有setup.py)上传到PyPI,则pip和easy_install都将失败。除了化妆品的差异,为什么Python的人(如上面的鸣叫)似乎强烈地倾向于在点子的easy_install?

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


74
在看到这个问题之前,我回答了一个不相关的问题,说“不要使用easy_install,请使用pip”。现在我想知道为什么我这么说……
Daniel Roseman 2010年

21
我仍然遇到导致pip失败的程序包,但是easy_install处理就好了,所以我对此也很好奇。
克瓦福德,2010年

5
pyobjc-core是可与easy_install一起使用但不适用于pip的软件包的示例。
马克·阿布拉莫维兹

5
四年后回到python的包装状态已经一团糟。现在是2014年,情况只会变得更糟。从我了解的setuptools 吸收的distutils,尽管官方python文档都无视这一点,但也不是要成为蟒蛇3的一部分,并且是点子挂像第三轮(双关语意)。
2014年

3
@drozzy:您碰巧在最糟糕的时间回来了-在一群核心开发人员认为事情变得一团糟之后,他们不得不介入解决问题。setuptools之所以不是Python 3的一部分,pip是因为它是最终用户唯一需要的部分。(显然pip install setuptools,想要在PyPI上分发的开发人员可以,以及他们可能想要的所有其他东西。)
abarnert 2015年

Answers:


304

此处的许多答案在2015年已经过时了(尽管最初由Daniel Roseman接受的答案不是)。这是当前的状态:

  • 现在,二进制程序包以轮子(.whl文件)的形式分发-不仅在PyPI上,而且在第三方存储库中,例如Christoph Gohlke的Windows Extension Packagespip可以处理轮子;easy_install不能。
  • 虚拟环境(由3.4内置,或者可以通过2.6添加到2.6 + / 3.1 + virtualenv)已经成为一个非常重要和突出的工具(并在官方文档中推荐);它们pip是开箱即用的,但是甚至无法正常使用easy_install
  • distribute包含的软件包easy_install不再维护。它的改进已setuptools合并回setuptools。尝试安装distribute只会安装setuptools
  • easy_install 本身只是准维护的。
  • 所有的其中箱子pip用于不如easy_install从解包源树-installing,从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如果要升级。


9
@drozzy:也许吧。但是请考虑再过五年,我的答案将与其他所有答案一样过时,而丹尼尔·罗斯曼(Daniel Roseman)的答案是永恒的。另外,我的回答不会是好,如果它不能依靠在演示一个5岁的接受的答案指向为什么 Python社区得到了背后pip的间隔时间。
abarnert 2015年

2
值得注意的是,一些pip的打包版本存在错误,并且pip无法自我升级。不管你认为这是讽刺与否,在这些情况下,最简单的方法是做easy_install -U pipeasy_install3 -U pip
analytik '16

“但甚至不能正常工作easy_install”,虽然我现在已经有一段时间没尝试过了,但是这并不是我的经验,尽管车轮现在占主导地位。但是Christoph Gohlke的二进制文件以前是作为可执行文件分发的。调用easy_install它们是我可以将那些软件包安装到虚拟环境的唯一方法,并且从未给我带来任何伤痛。哪种方式easy_install不再适用于虚拟环境?
jpmc26

599

从伊恩·比金(Ian Bicking)自己对pip介绍

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

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

63
“错误消息”的优势是巨大的,特别是对于新用户。简易安装以吐出数十个致命错误而闻名,但无论如何还是要成功完成安装,这使得它变得难以使用,直到您学会忽略它所说的大部分内容为止。Pip首先忽略了这些内容。
布兰登·罗兹

1
@Glyph使用easy_install pipover 有优势sudo apt-get install python-pip吗?
丹尼斯

2
不要在基于软件包的发行版的virtualenv之外使用easy_install:workaround.org/easy-install-debian
Federico

11
@Dennis:当使用sudo apt-get的Ubuntu / Debian上会安装在Python包/usr/lib/python/dist-packagessudo pipsudo easy_install将在安装/local/lib/python/site-packages和不幸的是Debian / Ubuntu的软件包往往有不同的名称,这点子是不熟悉的。恕我直言,最好的解决方案是使用virtualenv并在其中pip安装软件包。
Mark Mikofski 2012年

2
这需要更新。
Andriy Drozdyuk 2014年

248

另一个(至今尚未提及)之所以喜欢点子,是因为它是新的热点,并将在未来继续使用。

以下信息图表(来自《The Hitchhiker's Guide to Packaging v1.0》中的包装当前状态”部分)表明setuptools / easy_install将来会消失。

在此处输入图片说明

这是Distribution的文档中的另一个信息图,显示Setuptools和easy_install将被新的热点— distributionpip取代。虽然PIP仍然是新的辣味,分发与合并的setuptools在2013年发布的setuptools V0.7。

在此处输入图片说明


47
信息图表FTW
WineSoaked 2011年

34
OTOH,第二张图片已经过时了一年。发行版将终止使用,并由distutils2取代(该版本也将在以3.3开头的Python标准库中)。作为部分或distutils2提供了一个名为pysetup的基本安装程序,将来pip将继续在distutils2之上提供其他功能。
埃里克·阿劳霍

7
天哪,非常感谢你。多年来,我一直对python封装感到困惑,看到半权威性的发展道路令人振奋。
亚伦


21
这个“答案”太过时了,只是错误,甚至没有意思。
onlynone 2014年


116

需求文件。

认真地说,我每天都将它与virtualenv结合使用。


快速依赖管理教程,民谣

需求文件使您可以创建已通过pip安装的所有软件包的快照。通过将这些程序包封装在虚拟环境中,可以使代码库在一组非常特定的程序包中工作,并与其他人共享该代码库。

从Heroku的文档中 https://devcenter.heroku.com/articles/python

您创建一个虚拟环境,并设置您的外壳以使用它。(bash / * nix指令)

virtualenv env
source env/bin/activate

现在,与此外壳一起运行的所有python脚本都将使用该环境的软件包和配置。现在,您可以在此环境中本地安装软件包,而无需在计算机上全局安装。

pip install flask

现在,您可以转储有关安装哪些软件包的信息

pip freeze > requirements.txt

如果您将该文件签入版本控制中,那么当其他人获取您的代码时,他们可以设置自己的虚拟环境并使用以下命令安装所有依赖项:

pip install -r requirements.txt

任何时候您都可以像这样自动执行乏味的操作。


1
这似乎是setuptools的一部分,现在还有:pythonhosted.org/setuptools/...
舍甫琴科Drozdyuk

您应该pipreqs用来获取requirements.txt文件。它将仅提供与您要在其中调用pipreqs的项目相关的库,因此requirements.txt将基于项目而不是virtualenv。
SeF

83

pip不会安装二进制软件包,并且未在Windows上经过良好测试。

由于Windows默认没有附带编译器,因此通常无法在其中使用pip 。easy_install 可以为Windows安装二进制软件包。


3
有趣的是,我从未想到过。pip还不支持至少Zope员工使用的setuptools“ extras”功能。
Sridhar Ratnakumar,2010年

1
这是否表明需要在Windows上使用gcc环境,而不是坚持要求pip安装预构建的二进制文件?
WineSoaked 2011年

18
用于Windows的“正确”编译器是Visual Studio(我相信2008是最新版本的Python)。即使是免费版本,也要安装它很麻烦。在Windows上安装C扩展的正常方法是通过预编译的二进制文件。easy_install支持此功能,pip不支持。
Fuzzyman 2011年

8
这就是为什么我仍然使用easy_install的主要原因。
兰迪·赛林

14
自给出上述答案以来的几年中,pip不再能够在Windows或其他平台上安装二进制包,这不再是事实。该wheel二进制分发格式,使之成为可能。现在,许多带有C扩展模块的第三方程序包也作为用于各种平台的轮子分发了,pip可以自动安装它们。参见例如pythonwheels.com
Ned Deily

76

更新:正如某些人所想,setuptools已经吸收distribute了相反的东西。setuptools是最新的最新distutils更改和滚轮格式。因此,easy_installpip或多或少平等现在。

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


5
为什么不更多地投票呢?答案太过时了!
Andriy Drozdyuk 2014年

5
是的,最重要的答案已经过时了
WKordos

2
因此,easy_install和pip现在或多或少处于同等地位easy_install仍然是很长一段时间,点子对此进行了极大的改进。 easy_install只是setuptools最坏情况的一部分,并且可以说是最糟糕的情况之一,这就是为什么pip打算取代它。
Piotr Dobrogost

25

除了模糊人的答复:

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通过创建要PySide使用的OS X安装程序进行测试wheel,而不是蛋。会回来并报告此情况。

欢呼声-克里斯

快速更新:

到的过渡wheel即将结束。大多数软件包都支持wheel

我答应为制作车轮PySide,去年夏天我做了。很棒!

提示:一些开发商至今未能支撑轮格式,仅仅是因为他们忘记更换distutilssetuptools。通常,通过替换中的单个单词很容易转换此类软件包setup.py


2
更新以上-我认为等待几乎已经结束;-)
Christian Tismer

我将再次对此进行更新,因为wheel已在2014年春季成为标准。实际上,我认为这样的旧线程不应该无限更改,因为-旧的答案很不错-当现实改变时很容易替换所有内容。但是,当问题的原由消失后,这是否公平?
Christian Tismer

3

刚遇到一个我不得不easy_install代替的特殊情况pip,否则我必须直接提取源代码。

对于该软件包GitPython,in中的版本pip太旧,即0.1.7,而from中的版本easy_install是最新的,即0.3.2.rc1

我正在使用Python 2.7.8。我不知道有关的底层机制easy_installpip,但至少有一些包的版本可能是彼此不同的,有时easy_install是一个较新的版本。

easy_install GitPython

6
我现在检查了这一点(请参见时间戳),它不再成立:pip和easy_install的工作原理相同,今天是GitPython 0.3.5。(仅在OS X Yosemite上测试)。您的平台是什么?请更新您的条目,因为它现在具有误导性。
Christian Tismer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.