Twitter上写道:
Don't use easy_install, unless you
like stabbing yourself in the face.
Use pip.
为什么要使用PIP而不是简单安装?问题不主要在于pypi和包作者吗?如果作者将垃圾源tarball(例如:丢失的文件,没有setup.py)上载到pypi,那么pip和easy_安装都将失败。除了外观上的差异之外,为什么python的人(如上面的tweet)似乎更喜欢pip而不是简单的安装?
(假设我们讨论的是从社区维护的分发包轻松安装)
- 在我看到这个问题之前,我回答了一个无关的问题:"不要使用易安装,使用pip"。现在我想知道我为什么这么说…
- 我仍然会遇到导致PIP失败的软件包,但是很容易安装句柄,所以我对此也很好奇。
- pyobjc core是一个包的示例,该包可以轻松安装,但不能与pip一起使用。
- 四年后回到python,包装的状态就不再是一团糟了。到了2014年,情况更糟了。据我所知,SETUPTOOLS吸收了distuils,尽管官方的python文档对此一无所知,但它们都不会成为python 3的一部分,而pip就像一个三轮(pun的意思是)。
- PIP是否支持用户主目录安装?
- "帕维尔?"IMERDA是的,带有--user标志
- 同时,我使用轻松安装来在cygwin上安装pip!讽刺的…
- @Drozzy:在一群核心开发人员认为事情变得如此混乱以至于他们不得不参与解决问题之后,你恰好在最糟糕的时候回来了。setuptools不是Python3的一部分,因为pip是,这是最终用户唯一需要的部分。(想要在pypi上发布的开发人员显然可以使用pip install setuptools,以及他们可能需要的其他任何东西。)
- 我们可以重新打开这个吗?这个问题产生了一个真正有用的、客观的、基于事实的答案,在未来,事实可能会改变,我希望人们能够提供一个更有用的、更及时的答案。
从伊恩·比金自己对PIP的介绍:
pip was originally written to improve on easy_install in the following ways
-
All packages are downloaded before installation. Partially-completed installation doesn’t occur as a result.
-
Care is taken to present useful output on the console.
-
The reasons for actions are kept track of. For instance, if a package is being installed, pip keeps track of why that package was required.
-
Error messages should be useful.
-
The code is relatively concise and cohesive, making it easier to use programmatically.
-
Packages don’t have to be installed as egg archives, they can be installed flat (while keeping the egg metadata).
-
Native support for other version control systems (Git, Mercurial and Bazaar)
-
Uninstallation of packages.
-
Simple to define fixed sets of requirements and reliably reproduce a set of packages.
- "错误消息"的优势是巨大的,特别是对于新用户。轻松安装以吐出许多看起来像致命错误的东西而闻名,但最终还是成功地完成了安装,这使得在学会忽略它所说的大部分内容之前很难使用它。pip一开始只是省略了这些内容。
- @glyph使用easy_install pip比sudo apt-get install python-pip有优势吗?
- @丹尼斯:与apt-get相比,easy-install通常安装最新版本。
- 在基于包的分发版上,不要在virtualenv之外使用easy-install:workaround.org/easy-install-debian
- @丹尼斯:当使用sudo apt-getubuntu/debian时,会在/usr/lib/python/dist-packages中安装python软件包,而sudo pip或sudo easy_install将安装在/local/lib/python/site-packages中,不幸的是,debian/ubuntu软件包的名称通常与pip不熟悉的不同。IMHO的最佳解决方案是在所有软件包中使用virtualenv和pip。
- 这需要更新。
- 更新(重复用户3341691的回答):安装工具吸收了分布,而不是其他方式,正如一些人所认为的。SETUPTOOLS是最新的distuils更改和车轮格式。因此,现在简单安装和PIP基本上是平等的。来源:pythonhosted.org/setuptools/…
- 我们已经有很多年没有宣布这些目标了,而且没有一个目标没有实现。是的,easy_install是垃圾,但pip也是垃圾。除了一些表面的东西,什么都没有改变。
这里的许多答案在2015年已经过时了(尽管丹尼尔·罗斯曼最初接受的答案不是)。现在的情况是:
- 二进制软件包现在以轮子(.whl文件)的形式分发——不仅在pypi上,而且在第三方存储库(如christoph gohlke的Windows扩展软件包)中。pip可以操纵车轮;easy_install不能。
- 虚拟环境(内置于3.4中,或者可以添加到2.6+/3.1+,使用virtualenv中)已经成为一个非常重要和突出的工具(并在官方文档中推荐);它们包括pip现成的,但甚至不能与easy_install正常工作。
- 包含easy_install的distribute包不再维护。它对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通过构建一个需求文件,然后在每侧使用一个命令安装它,使得克隆站点包变得容易。或者将您的需求文件转换为本地回购以用于内部开发。等等。
我知道在2015年使用easy_install的唯一好理由是在OS X 10.5-10.8中使用苹果预装的python版本。从10.5年开始,苹果就已经包括了easy_install,但到10.10年,他们仍然不包括pip。对于10.9+,您应该仍然只使用get-pip.py,但是对于10.5-10.8,这有一些问题,因此更容易使用sudo easy_install pip。(一般来说,easy_install pip是个坏主意;你想这样做只是为了操作系统x 10.5-10.8。)另外,10.5-10.8包括readline,在某种程度上,easy_install知道如何混用,但pip不知道,所以如果你想升级的话,你也要sudo easy_install readline。
- @卓兹:也许吧。但再过5年,我的答案就和其他人一样过时了,而丹尼尔·罗斯曼的答案是永恒的。另外,如果我的回答不能依赖于一个5年前被接受的答案,那就没有那么好了,因为这个答案可以证明为什么在中间的时间里Python社区落后于pip。
- 值得注意的是,一些打包的PIP版本有问题,并且PIP本身无法升级。不管你认为这是不是讽刺,在这种情况下,最简单的解决办法是做easy_install -U pip或easy_install3 -U pip。
- "但甚至不能与easy_install一起正常工作"这不是我的经验,尽管我已经有一段时间没有尝试过了,因为车轮现在占主导地位。但是ChristophGohlke的二进制文件过去是作为可执行的鸡蛋分发的。打电话给easy_install是我将这些包安装到虚拟环境中的唯一方法,它从来没有给我带来任何痛心。在什么情况下,easy_install不再与虚拟env一起工作?
另一个至今未被提及的支持PIP的原因是因为它是一种新的热度,并将在未来继续使用。
下面的信息图来自于Hitchiker's Guide to Packaging v1.0中的"当前包装状态"部分,它显示了将来安装工具/简易安装将不再存在。
下面是Distribute文档中的另一个信息图,显示安装工具和轻松安装将被新的hotness distribute和pip所取代。虽然PIP仍然是新的热点,但2013年发布的SETUPTOOLS v0.7与SETUPTOOLS合并发布。
- 信息图形FTW
- 第二个图形已经过时一年了。Distribute将达到生命周期的末尾,并被distuils2取代(从3.3开始,它也将位于Python标准库中)。名为pysetup的基本安装程序作为part或distuils2提供,将来pip将继续在distuils2之上提供其他功能。
- 哦,非常感谢。多年来,我一直对Python打包感到困惑,看到一条半权威的前进之路令人振奋。
- @第二个图形里卡劳乔还没有过时。它将在将来实现,当时distutils2已经实际实现,但还没有实现。
- distutils2仍处于alpha阶段
- 笑得死去活来如果这个答案与另一个答案的文本合并,它应该完全是一个真正的答案。
- 终于!我希望其他领域专家也能制作出这样的图形。每当我进入一个新的软件生态系统时,我都会花上几天的时间来弄清楚哪些工具和软件包是过时的,哪些是首选的,哪些是对竞争对手的补充,哪些是功能重叠的,等等。
- 截至2013年3月,distribute与setuptools合并。pip工程。python 3.3中不包括packaging(distutils2)。
- 这个"答案"太过时了,只是错了,甚至都不好笑。
有两个原因,可能还有更多:
pip提供uninstall命令
如果安装在中间失败,PIP将使您处于干净状态。
- 现在安装工具也是如此。嗯…一种。pythonhosted.org/setuptools/…
需求文件。
说真的,我每天都将它与virtualenv结合使用。
快速依赖关系管理教程,伙计们
需求文件允许您创建通过PIP安装的所有包的快照。通过将这些包封装在虚拟环境中,您可以让您的代码库使用一组非常特定的包,并与其他人共享该代码库。
来自Heroku的文档https://devcenter.heroku.com/articles/python
您创建了一个虚拟环境,并将shell设置为使用它。(bash/*nix指令)
1 2
| virtualenv env
source env/bin/activate |
现在,所有用这个shell运行的python脚本都将使用这个环境的包和配置。现在,您可以将包本地安装到此环境,而无需在计算机上全局安装它。
现在,您可以转储有关安装哪些软件包的信息
1
| pip freeze > requirements.txt |
如果您将该文件签入版本控制,当其他人获得您的代码时,他们可以设置自己的虚拟环境,并安装所有依赖项:
1
| pip install -r requirements.txt |
任何时候你能像这样自动处理无聊的事情都是很棒的。
- 这似乎也是安装工具的一部分:pythonhosted.org/setuptools/…
PIP不会安装二进制软件包,并且在Windows上测试得不好。
由于Windows没有默认的编译器,所以通常不能在那里使用pip。轻松安装可以安装Windows的二进制软件包。
- 有趣的是,我从没想过。PIP也不支持至少由Zope人员使用的安装工具"额外"功能。
- 这是否表明需要在Windows上安装GCC环境,而不是坚持PIP安装预构建的二进制文件?
- 用于Windows的"正确的"编译器是Visual Studio(2008年我认为是最新版本的Python)。安装这个,即使是免费版本,也很麻烦。在Windows上安装C扩展的正常方法是从预编译的二进制文件。容易安装支持这个,PIP不支持。
- 您可以通过mingw32在Windows上使用gcc,并将distuils配置为使用它。由于C运行时不匹配,并不是所有的东西都可以使用它(例如,文件描述符将是不同的)。
- 这就是为什么我仍然使用易于安装的主要原因。
- 确切地。应该有一个新的问题:"为什么要在pip上使用easy-install…"在Windows上。例如,只需将另一台计算机连接到NLTK(至少这取决于numpy,如果不是其他计算机的话),对于Windows PIP来说,这并不太好。
- 伙计,这很有用。我在Windows上安装了最新的mingw gcc和msys,可惜pip没有收到。很高兴知道,当pip使我失败时,easy_install可能是一种倒退。
- PIP+VS2008工作得很好…无论如何,最好还是能从源代码编译,因为所有的库肯定不会为每个平台提供二进制文件,这是一个痛苦的当你必须为你的东西设置一个自动化的部署计划,除非你使用纯python-only libs或源代码…VS2008的安装非常简单,它是免费的(就像"免费啤酒"),这绝对是在Windows下本地编译C的最标准方法。
- 在给出上述答案的几年里,PIP不能在Windows或其他平台上安装二进制软件包已经不再是事实了。wheel二进制分发格式使这成为可能。许多带有C扩展模块的第三方软件包现在也作为为各种平台构建的轮子被分发,并且PIP可以自动安装它们。例如,请参见pythonwheels.com。
最新消息:正如一些人所认为的那样,setuptools吸收了distribute,而不是相反。setuptools是最新的distutils更改和车轮格式。因此,现在,easy_install和pip基本上是平等的。
来源:http://pythonhosted.org/setuptools/merge faq.html为什么不发布setuptools或其他名称
- 为什么这次投票没有更多?答案太过时了!
- 是的,最重要的答案显然过时了
- 因此,容易安装和PIP或多或少是平等的,现在这是胡说八道。easy_install仍然是很长一段时间以来一直存在的问题,PIP在这个问题上得到了极大的改善。easy_install只是setuptools的一部分,可以说是最糟糕的一部分,这就是为什么pip打算取代它。
作为Fuzzyman回复的补充:
pip won't install binary packages and isn't well tested on Windows.
As Windows doesn't come with a compiler by default pip often can't be
used there. easy_install can install binary packages for Windows.
以下是Windows上的一个技巧:
这只是一个在Windows上对我有用的工作。实际上,如果不涉及二进制文件,我总是使用pip。
请参阅当前的pip doku:http://www.pip-installer.org/en/latest/other tools.html pip与轻松安装的比较
I will ask on the mailing list what is planned for that.
以下是最新更新:
安装二进制文件的新支持方式将是wheel!它还没有在标准中,但几乎是。当前版本仍然是alpha:1.0.0a1
https://pypi.python.org/pypi/wheel/轮
http://wheel.readthedocs.org/en/latest/最新版本/
我将使用wheel而不是鸡蛋为PySide创建一个OS X安装程序来测试wheel。会回来报告这件事的。
欢呼-克里斯
快速更新:
向wheel的过渡几乎结束。大多数软件包都支持wheel。
我答应给江户十一〔五〕造轮子,去年夏天我就做了。工作很棒!
提示:到目前为止,一些开发人员未能支持车轮格式,仅仅是因为他们忘记了用setuptools代替distutils。通常,通过在setup.py中替换这个单词,可以很容易地转换这些包。
- 以上更新-我认为等待即将结束;-)
- 我应该再次更新这一点,因为2014年春季车轮已经成为标准配置。事实上,我认为这些旧的线索不应该无限地改变,因为——旧的答案相当好——当现实发生变化时,很容易替换所有的东西。但是,当一个问题的原始原因消失时,这公平吗?
- 对Windows用户非常有用的答案。
刚遇到一个特殊情况,我必须使用easy_install而不是pip,否则我必须直接提取源代码。
对于GitPython包,pip中的版本太旧,即0.1.7,而easy_install中的版本是最新的,即0.3.2.rc1。
我用的是Python 2.7.8。我不确定easy_install和pip的底层机制,但至少有些包的版本可能不同,有时easy_install是更新版本的。
- 我现在检查了这个(见时间戳),但现在已经不是这样了:pip和easy-install都工作得一样,导致了今天的gitpython 0.3.5。(仅在OS X Yosemite上测试)。你的平台是什么?请更新您的条目,因为它现在有误导性。