为什么要使用pip而不是easy_install?

Rei*_*ica 924 python pip setuptools easy-install pypi

一个鸣叫曰:

不要使用easy_install,除非你喜欢刺伤自己的脸.使用点子.

为什么要使用pip而不是easy_install?问题不在于PyPI和包装作者吗?如果作者将垃圾源tarball(例如:丢失文件,没有setup.py)上传到PyPI,那么pip和easy_install都将失败.除了化妆品差异,为什么Python人(如上面的推文)似乎强烈支持pip而不是easy_install?

(我们假设我们正在讨论来自Distribute包的easy_install,这是由社区维护的)

Dan*_*man 597

从Ian Bicking自己对pip介绍:

pip最初是用以下方式编写的,用于改进easy_install

  • 安装前会下载所有软件包.结果不会发生部分完成的安装.
  • 注意在控制台上呈现有用的输出.
  • 采取行动的原因得到了跟踪.例如,如果正在安装软件包,则pip会跟踪为什么需要该软件包.
  • 错误消息应该是有用的.
  • 代码相对简洁和有凝聚力,使编程更容易使用.
  • 软件包不必作为egg存档安装,它们可以平放(同时保留egg元数据).
  • 对其他版本控制系统(Git,Mercurial和Bazaar)的原生支持
  • 卸载软件包.
  • 简单地定义固定的需求集并可靠地重现一组包.

  • "错误消息"的优势是巨大的,特别是对于新用户.Easy-install以吐出几十个看起来像致命错误的东西而闻名,但最终还是成功完成安装,这使得它难以使用,直到你学会忽略它所说的大部分内容.Pip只是简单地省略了那些事情. (62认同)
  • @Dennis:当使用`sudo apt-get`时,Ubuntu/Debian会在`/ usr/lib/python/dist-packages`中安装Python包,而`sudo pip`或`sudo easy_install`将安装在`/ local/lib/python/site-packages`并且不幸的是Debian/Ubuntu软件包通常有不同的名称,pip并不熟悉.最好的解决方案IMHO是使用virtualenv和`pip`来安装你的包. (11认同)
  • 不要在基于包的发行版的virtualenv之外使用easy_install:http://workaround.org/easy-install-debian (2认同)
  • 这需要更新. (2认同)

aba*_*ert 299

这里的许多答案都是2015年的过时(尽管丹尼尔罗斯曼最初接受的答案不是).这是现状:

  • 二进制包现在作为轮子(.whl文件)分发- 不只是在PyPI上,而是在第三方存储库中,如Christoph Gohlke的Windows扩展包.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从解包源树-installing,从DVCS回购等-是长消失了; 你可以pip install .,pip install git+https://.
  • pip附带来自python.org的官方Python 2.7和3.4+软件包,pip如果你从source构建,默认情况下会包含一个bootstrap.
  • 有关安装,使用和构建软件包的各种不完整文档已被" Python打包用户指南"取代.Python自己的安装Python模块文档现在遵循本用户指南,并明确地pip称为"首选安装程序".
  • 多年来增加pip了其他新功能,这些功能永远不会出现easy_install.例如,pip通过构建需求文件然后在每一侧使用单个命令安装它,可以轻松克隆您的站点包.或者将您的需求文件转换为本地仓库以用于内部开发.等等.

我知道easy_install在2015年使用的唯一理由是使用Apple预装的Python版本与OS X 10.5-10.8的特殊情况.自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如果你想升级它.

  • @drozzy:也许吧.但考虑到在另外5年内,我的答案将与其他所有人一样过时,而丹尼尔罗斯曼则是永恒的.另外,如果它不能依赖于一个5年前接受的答案,那么我的答案就不会那么好了,这个答案证明了在这段时间内Python社区背后的"pip". (9认同)
  • 值得注意的是,pip的某些打包版本是错误的,并且pip未能自行升级.无论你是否认为具有讽刺意味,在这种情况下最简单的解决方案是做"easy_install -U pip"或"easy_install3 -U pip". (2认同)

Mat*_*kin 248

另一个 - 因为尚未提及 - 支持pip的原因是因为它是新的热点并将继续在未来使用.

下面的信息图 - 来自The Hitchhiker's Guide to Packaging v1.0中当前包装状态部分 - 显示setuptools/easy_install将来会消失.

在此输入图像描述

这是来自distribute文档的另一个信息图,显示Setuptools和easy_install将被新的hotness- distributepip取代.虽然PIP仍然是新的辣味,分发与合并的setuptools在2013年发布的setuptools V0.7.

在此输入图像描述

  • 截至2013年3月[`distribute`正与`setuptools`合并](http://mail.python.org/pipermail/distutils-sig/2013-March/020126.html).`pip`有效.[`packaging`(`distutils2`)*不包含在Python 3.3中](https://distlib.readthedocs.org/en/latest/overview.html#what-was-the-problem-with-packaging). (61认同)
  • 信息图表FTW (46认同)
  • OTOH,第二张图片已经过时了一年.分布将达到寿命终止并被distutils2取代(这也将在3.3标准的Python标准库中).名为pysetup的基本安装程序作为part或distutils2提供,并且pip将来会继续在distutils2之上提供其他功能. (34认同)
  • 这个"答案"已经过时了,只是错了,它甚至都不好笑. (21认同)
  • omg非常感谢你.多年来我一直对python包装感到困惑,看到一条半权威的前进道路令人振奋. (7认同)
  • @ÉricAraujo第二张图片尚未过时.它将在*future*中,当distutils2实际已经实现时,但尚未发生. (3认同)
  • 最后!我希望其他领域专家能够生成这样的图形.每当我进入一个新的软件生态系统时,我花了好几天时间试图弄清楚哪些工具和软件包已经过时,哪些是首选的,哪些是彼此对竞争对手的补充,功能如何重叠等等. (2认同)

Ned*_*der 171

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

  1. pip提供了一个uninstall命令

  2. 如果安装在中间失败,则pip将使您处于干净状态.


Mat*_*kel 116

要求文件.

说真的,我每天都和virtualenv一起使用它.


快速依赖管理补习,民俗

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

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

您创建一个虚拟环境,并设置您的shell以使用它.(bash/*nix说明)

virtualenv env
source env/bin/activate
Run Code Online (Sandbox Code Playgroud)

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

pip install flask
Run Code Online (Sandbox Code Playgroud)

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

pip freeze > requirements.txt
Run Code Online (Sandbox Code Playgroud)

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

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

任何时候你都可以像这样自动化单调乏味了.


fuz*_*man 83

pip不会安装二进制包,并且在Windows上没有经过良好测试.

由于Windows默认情况下没有编译器,因此pip通常不能在那里使用.easy_install 可以为Windows安装二进制包.

  • 用于Windows的"正确"编译器是Visual Studio(2008年我相信最新版本的Python).安装这个,即使是免费版本也是一件麻烦事.在Windows上安装C扩展的*normal*方式来自预编译的二进制文件.easy_install支持这个,pip没有. (18认同)
  • 自从给出上述答案以来的几年中,pip无法在Windows或其他平台上安装二进制包.`wheel`二进制分发格式使这成为可能.许多带有C扩展模块的第三方软件包现在也被分发为为各种平台构建的轮子,pip可以自动安装它们.例如,参见http://pythonwheels.com (13认同)
  • 这是我仍然使用easy_install的主要原因. (8认同)
  • 有意思,我从未想过这一点.pip也不支持Zope人员至少使用的setuptools"extras"功能. (3认同)

use*_*691 76

更新:setuptools已经吸收distribute而不是相反,正如一些人所想的那样.setuptools与最新的distutils变化和车轮格式保持同步.因此,easy_installpip现或多或少平等.

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

  • 为什么不进一步投票呢?答案太过分了! (5认同)
  • 是的,最重要的答案是过时的 (5认同)
  • *因此,easy_install和pip现在或多或少平等*这是无稽之谈.`easy_install`仍然是很久以来的事情,而且pip在很大程度上改善了它.`easy_install`只是`setuptools`的一部分,可以说是最糟糕的一个,这就是pip旨在取代它的原因之一. (2认同)

Chr*_*mer 25

作为fuzzyman的回复的补充:

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通过创建一个OS X安装程序来测试,而不是PySide使用wheelegg.将回来并报告此事.

欢呼 - 克里斯

快速更新:

过渡到wheel几乎结束了.大多数软件包都支持wheel.

我答应为我制造轮子PySide,去年夏天我做到了.效果很好!

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

  • 上面更新 - 我认为等待几乎结束;-) (2认同)