关于python:为什么使用pip而不是简单安装?

Why use pip over easy_install?

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 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.


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

  • 二进制软件包现在以轮子(.whl文件)的形式分发——不仅在pypi上,而且在第三方存储库(如christoph gohlke的Windows扩展软件包)中。pip可以操纵车轮;easy_install不能。
  • 虚拟环境(内置于3.4中,或者可以添加到2.6+/3.1+,使用virtualenv中)已经成为一个非常重要和突出的工具(并在官方文档中推荐);它们包括pip现成的,但甚至不能与easy_install正常工作。
  • 包含easy_installdistribute包不再维护。它对setuptools的改进被合并回setuptools。尝试安装distribute只会安装setuptools
  • easy_install本身只是准维持的。
  • 以前pipeasy_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


另一个至今未被提及的支持PIP的原因是因为它是一种新的热度,并将在未来继续使用。

下面的信息图来自于Hitchiker's Guide to Packaging v1.0中的"当前包装状态"部分,它显示了将来安装工具/简易安装将不再存在。

enter image description here

下面是Distribute文档中的另一个信息图,显示安装工具和轻松安装将被新的hotness distribute和pip所取代。虽然PIP仍然是新的热点,但2013年发布的SETUPTOOLS v0.7与SETUPTOOLS合并发布。

enter image description here


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

  • pip提供uninstall命令

  • 如果安装在中间失败,PIP将使您处于干净状态。


  • 需求文件。

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

    快速依赖关系管理教程,伙计们

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

    来自Heroku的文档https://devcenter.heroku.com/articles/python

    您创建了一个虚拟环境,并将shell设置为使用它。(bash/*nix指令)

    1
    2
    virtualenv env
    source env/bin/activate

    现在,所有用这个shell运行的python脚本都将使用这个环境的包和配置。现在,您可以将包本地安装到此环境,而无需在计算机上全局安装它。

    1
    pip install flask

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

    1
    pip freeze > requirements.txt

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

    1
    pip install -r requirements.txt

    任何时候你能像这样自动处理无聊的事情都是很棒的。


    PIP不会安装二进制软件包,并且在Windows上测试得不好。

    由于Windows没有默认的编译器,所以通常不能在那里使用pip。轻松安装可以安装Windows的二进制软件包。


    最新消息:正如一些人所认为的那样,setuptools吸收了distribute,而不是相反。setuptools是最新的distutils更改和车轮格式。因此,现在,easy_installpip基本上是平等的。

    来源:http://pythonhosted.org/setuptools/merge faq.html为什么不发布setuptools或其他名称


    作为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上的一个技巧:

    • 您可以使用easy_install 安装二进制软件包,以避免构建二进制软件包。

    • 您可以使用pip uninstall ,即使您使用了轻松安装。

    这只是一个在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中替换这个单词,可以很容易地转换这些包。


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

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

    我用的是Python 2.7.8。我不确定easy_installpip的底层机制,但至少有些包的版本可能不同,有时easy_install是更新版本的。

    1
    easy_install GitPython