首页 文章

为什么使用pip over easy_install? [关闭]

提问于
浏览
898

tweet读到:

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

为什么使用pip over easy_install?不是fault lie with PyPI and package authors mostly?如果作者将垃圾源tarball(例如:丢失文件,没有setup.py)上传到PyPI,那么pip和easy_install都将失败 . 除了外观差异,为什么Python人(如上面的推文)似乎更喜欢pip而不是easy_install?

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

9 回答

  • 279

    作为fuzzyman的回复的补充:

    pip将不会安装二进制包,并且在Windows上未经过充分测试 . 由于Windows默认情况下没有编译器,因此pip通常不能在那里使用 . easy_install可以为Windows安装二进制包 .

    这是Windows上的一个技巧:

    • 您可以使用 easy_install <package> 来安装二进制包以避免构建二进制文件

    • 即使使用easy_install,也可以使用 pip uninstall <package> .

    这只是一种适用于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 制造轮子,去年夏天我就这样做了 . 效果很好!

    提示:到目前为止,一些开发人员未能支持轮式,只是因为他们忘了将 distutils 替换为 setuptools . 通常,通过替换 setup.py 中的这个单词很容易转换这些包 .

  • 167

    来自Ian Bicking自己的introduction to pip

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

  • 112

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

    • pip提供 uninstall 命令

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

  • 3

    要求文件 .

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


    QUICK DEPENDENCY MANAGEMENT TUTORIAL, FOLKS

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

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

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

    virtualenv env
    source env/bin/activate
    

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

    pip install flask
    

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

    pip freeze > requirements.txt
    

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

    pip install -r requirements.txt
    

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

  • 71

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

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

  • 23

    pip不会安装二进制包,也没有经过Windows测试 .

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

  • 79

    这里的许多答案都是2015年的过时(尽管the initially accepted one from Daniel Roseman不是) . 这是目前的状况:

    • 二进制包现在作为轮子( .whl 文件)分发 - 不只是在PyPI上,而是在第四方存储库中,如Christoph Gohlke's Extension Packages for Windows . pip 可以处理轮子; easy_install 不能 .

    • 虚拟环境(内置3.4,或者可以添加到2.6 /3.1中)virtualenv)已成为一个非常重要和突出的工具(并在the official docs中推荐);它们包括 pip 开箱即用,但是甚至无法正常使用 easy_install .

    • 不再维护包含 easy_installdistribute 包 . 它对 setuptools 的改进被合并回 setuptools . 尝试安装 distribute 只会安装 setuptools .

    • easy_install 本身只是准维护 .

    • pip 曾经从一个解压缩的源代码树,DVCS仓库等安装的 easy_install 以下的所有情况都很久了;你可以 pip install .pip install git+https:// .

    • pip 附带python.org的官方Python 2.7和3.4软件包,如果你从source构建,默认包含 pip bootstrap .

    • 有关安装,使用和构建软件包的各种不完整文档已被Python Packaging User Guide替换 . Python自己在Installing Python Modules上的文档现在遵循本用户指南,并明确地将 pip 调用为"the preferred installer program" .

    • 多年来 pip 已添加了其他新功能,这些功能永远不会出现在 easy_install 中 . 例如, pip 可以通过构建需求文件然后在每一侧使用单个命令安装它来轻松克隆您的站点包 . 或者将您的需求文件转换为本地仓库以用于内部开发 . 等等 .

    我知道在2015年使用 easy_install 的唯一原因是使用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包含 readlineeasy_install 知道如何克服但 pip 没有,所以如果你想升级它,你也想 sudo easy_install readline .

  • 587

    刚刚遇到一个我必须使用 easy_install 而不是 pip 的特殊情况,或者我必须直接提取源代码 .

    对于包 GitPythonpip 中的版本太旧,这是 0.1.7 ,而 easy_install 中的版本是最新的 0.3.2.rc1 .

    我正在使用 Python 2.7.8 . 我不确定 easy_installpip 的底层机制,但至少某些软件包的版本可能彼此不同,有时 easy_install 是更新版本的版本 .

    easy_install GitPython
    
  • 245

    另一个 - 尚未提及 - 赞成pip的理由是因为它是新的热点并将继续在未来使用 .

    下面的信息图 - 来自The Hitchhiker's Guide to Packaging v1.0Current State of Packaging部分显示setuptools / easy_install将来会消失 .

    enter image description here

    这是来自distribute's documentation的另一个信息图,显示Setuptools和easy_install将被新热点distributepip取代 . 虽然pip仍然是新的热点,但Distribute在2013年与Setuptools合并,发布了Setuptools v0.7 .

    enter image description here

相关问题