为什么使用易于安装的点子?
推文如下:
不要使用easy_install,除非你喜欢刺伤你的脸。 使用点子。
为什么使用易于安装的点子? PyPI和包装作者大部分都不会犯这个错误吗? 如果作者上传垃圾源tarball(例如:缺less文件,没有setup.py)到PyPI,那么pip和easy_install都将失败。 除了表面上的差异之外,为什么Python人(比如在上面的tweet中)似乎强烈支持easy_install的点数?
(让我们假设我们正在讨论由社区维护的Distribute包中的easy_install)
这里的许多答案已经过时了(但丹尼尔·罗斯曼最初接受的答案却不是)。 以下是目前的状况:
- 二进制软件包现在以轮子(
.whl
文件)的forms分发 – 不仅仅在PyPI上,而且在像Christoph Gohlke的Windows扩展软件包这样的第三方软件库中。pip
可以处理轮子;easy_install
不能。 - 虚拟环境(内置3.4,或者可以通过
virtualenv
添加到2.6 + / 3.1 +)已经成为一个非常重要和突出的工具(并在官方文档中推荐)。 它们包括开箱即用的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+包,并且如果从源代码构build,默认包含pip
引导程序。 - 关于安装,使用和构build软件包的各种不完整的文档已被Python打包用户指南取代。 Python自己的关于安装Python模块的文档现在按照这个用户指南,并明确地把
pip
叫做“首选的安装程序”。 - 其他新function已被添加
pip
多年来永远不会easy_install
。 例如,通过构build需求文件,然后使用单个命令在每一侧安装,pip
可以轻松地克隆您的站点包。 或者将您的需求文件转换为本地回购以用于内部开发。 等等。
我知道在2015年使用easy_install
的唯一好理由是使用苹果预装的Python版本OS X 10.5-10.8的特殊情况。 自10.5以来,苹果已经包含了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会跟踪为什么需要这个软件包。
- 错误消息应该是有用的。
- 该代码相对简洁和紧密,使编程更容易使用。
- 软件包不需要作为鸡蛋档案库来安装,它们可以平放(同时保留蛋元数据)。
- 原生支持其他版本控制系统(Git,Mercurial和Bazaar)
- 软件包的卸载。
- 简单地定义固定的需求集合并可靠地复制一组包。
另外一个尚未提及的理由是支持点是因为这是新的热点,并将继续在未来使用。
从“ 打包 的漫游指南”v1.0中的“ 当前打包状态”部分下面的信息图表明,setuptools / easy_install将在未来消失。
这里是来自发行版文档的另一个信息图,显示Setuptools和easy_install将被新的hotness- distribute和pip所取代。 虽然pip仍然是新的热点 ,但2013年,随着Setuptools v0.7的发布, Distribute与Setuptools合并。
两个原因,可能还有更多:
-
pip提供了
uninstall
命令 -
如果中间安装失败,点将使您处于干净状态。
需求文件。
说真的,我每天都会和virtualenv一起使用它。
快速的依赖pipe理教程,客户
需求文件允许您创build通过pip安装的所有软件包的快照。 通过将这些软件包封装在一个虚拟环境中,您可以让您的代码库运行一组非常特定的软件包,并与其他人共享该代码库。
从Heroku的文档https://devcenter.heroku.com/articles/python
你创build一个虚拟环境,并设置你的shell来使用它。 (bash / * nix指令)
virtualenv env source env/bin/activate
现在所有用这个shell运行的python脚本都将使用这个环境的包和configuration。 现在你可以在本地安装一个软件包到这个环境,而不需要在你的机器上全局安装它。
pip install flask
现在您可以转储有关安装哪些软件包的信息
pip freeze > requirements.txt
如果您将该文件检入版本控制,当其他人获得您的代码时,他们可以设置自己的虚拟环境,并安装所有依赖项:
pip install -r requirements.txt
任何时候你都可以自动化枯燥乏味的事情。
点将不会安装二进制包,并没有很好的testing在Windows上。
由于Windows默认没有编译器,所以通常不能在那里使用。 easy_install 可以安装Windows的二进制包。
更新: setuptools
吸收了distribute
,而不是相反的方式,如一些想法。 setuptools
是最新的distutils
变化和车轮格式。 因此, easy_install
和pip
现在或多或less处于平等地位。
资料来源: http : //pythonhosted.org/setuptools/merge-faq.html#why-setuptools-and-not-distribute-or-another-name
除了模糊的回答:
点将不会安装二进制包,并没有很好的testing在Windows上。
由于Windows默认没有编译器,所以通常不能在那里使用。 easy_install可以安装Windows的二进制包。
这是Windows上的一个技巧:
-
您可以使用
easy_install <package>
来安装二进制包以避免构build二进制文件 -
即使使用easy_install,也可以使用
pip uninstall <package>
。
这只是在Windows上适用于我的解决方法。 实际上,如果不涉及二进制文件,我总是使用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
代替鸡蛋来创buildPySide
的OS X安装程序来testingwheel
。 将回来并报告这一点。
欢呼声 – 克里斯
快速更新:
过渡到wheel
几乎已经结束。 大多数包裹都是支撑wheel
。
我答应为PySide
打造轮子,去年夏天我就做到了。 太棒了!
提示:一些开发人员到目前为止支持wheel格式失败,仅仅是因为他们忘记了setuptools
replacedistutils
。 通常,通过replacesetup.py
这个单词来转换这些包是很容易的。
刚刚遇到一个特殊情况,我不得不使用easy_install
而不是pip
,或者我必须直接拉取源代码。
对于GitPython
包, pip
的版本太旧,为0.1.7
, easy_install
中的版本最新为0.3.2.rc1
。
我正在使用Python 2.7.8
。 我不确定easy_install
和pip
的底层机制,但是至less某些软件包的版本可能彼此不同,有时easy_install
是新版本的版本。
easy_install GitPython