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

2024-12-19 09:23:00
admin
原创
61
摘要:问题描述:推文如下:不要使用 easy_install,除非你喜欢自讨苦吃。使用 pip。为什么要使用 pip 而不是 easy_install?这难道不是PyPI 和软件包作者的错吗?如果作者将垃圾源 tarball(例如:缺少文件,没有 setup.py)上传到 PyPI,那么 pip 和 easy_in...

问题描述:

推文如下:

不要使用 easy_install,除非你喜欢自讨苦吃。使用 pip。

为什么要使用 pip 而不是 easy_install?这难道不是PyPI 和软件包作者的错吗?如果作者将垃圾源 tarball(例如:缺少文件,没有 setup.py)上传到 PyPI,那么 pip 和 easy_install 都会失败。除了外观上的差异之外,为什么 Python 人员(如上面的推文)似乎强烈支持 pip 而不是 easy_install?

(我们假设我们正在讨论由社区维护的 Distribute 包中的 easy_install)


解决方案 1:

来自 Ian Bicking对 pip 的介绍:

pip 最初是为了通过以下方式改进 easy_install 而编写的

  • 安装前会下载所有软件包。因此不会出现安装不完整的情况。

  • 注意在控制台上显示有用的输出。

  • 操作原因会被记录下来。例如,如果正在安装某个包,pip 会记录需要该包的原因。

  • 错误消息应该是有用的。

  • 代码相对简洁且具有凝聚力,使得更易于以编程方式使用。

  • 软件包不必作为 egg 档案安装,它们可以以平面形式安装(同时保留 egg 元数据)。

  • 对其他版本控制系统(Git、Mercurial 和 Bazaar)的本机支持

  • 卸载软件包。

  • 简单定义固定的需求集并可靠地重现一组包。

解决方案 2:

这里的许多答案对于 2015 年来说都已经过时了(尽管Daniel Roseman 最初接受的答案并没有过时)。以下是目前的情况:

  • 二进制包现在以轮子(文件)的形式分发.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所有以前不如从解压的源代码树、从 DVCS 存储库等进行安装的情况easy_install都已不复存在;您可以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是使用 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

解决方案 3:

另一个 — — 目前尚未提及 — — 青睐pip的原因是因为它是新兴热点并将在未来继续被使用。

下面的信息图取自《包装指南》v1.0中的“包装现状”部分,显示 setuptools/easy_install 将来会消失。

在此处输入图片描述

这是来自deliver 文档的另一张信息图,显示Setuptools和 easy_install 将被新热门——distribute和pip取代。虽然pip仍然是新热门,但Distribute已于 2013 年与Setuptools合并,并发布了Setuptools v0.7。

在此处输入图片描述

解决方案 4:

有两个原因,或许还有更多:

  1. pip 提供了一个uninstall命令

  2. 如果安装中途失败,pip 将让您处于干净状态。

解决方案 5:

需求文件。

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


快速依赖管理教程,大家好

需求文件允许您创建已通过 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

任何时候你都可以像这样自动化单调乏味的工作,真是太棒了。

解决方案 6:

pip 不会安装二进制包,并且在 Windows 上没有经过充分测试。

由于 Windows 默认没有自带编译器,因此 pip 通常无法在那里使用。easy_install可以为 Windows 安装二进制包。

解决方案 7:

更新:setuptools已经吸收,distribute而不是像有些人认为的那样反过来。与最新的更改和轮盘格式setuptools保持同步。因此,和现在或多或少处于平等地位。distutils`easy_install`pip

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

解决方案 8:

作为 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代替wheeleggs 进行测试。我会回来报告此事。

欢呼 - 克里斯

快速更新:

到 的过渡wheel即将结束。大多数软件包都支持wheel

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

提示:到目前为止,一些开发人员未能支持 wheel 格式,只是因为他们忘记用 替换distutilssetuptools通常,只需在 中替换这个单词即可轻松转换此类软件包setup.py

解决方案 9:

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

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

我正在使用Python 2.7.8。我不确定easy_install和 的底层机制pip,但至少一些包的版本可能彼此不同,有时easy_install是具有较新版本的包。

easy_install GitPython
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   990  
  在项目管理领域,CDCP(Certified Data Center Professional)认证评审是一个至关重要的环节,它不仅验证了项目团队的专业能力,还直接关系到项目的成功与否。在这一评审过程中,沟通技巧的运用至关重要。有效的沟通不仅能够确保信息的准确传递,还能增强团队协作,提升评审效率。本文将深入探讨CDCP...
华为IPD流程   26  
  IPD(Integrated Product Development,集成产品开发)是一种以客户需求为核心、跨部门协同的产品开发模式,旨在通过高效的资源整合和流程优化,提升产品开发的成功率和市场竞争力。在IPD培训课程中,掌握关键成功因素是确保团队能够有效实施这一模式的核心。以下将从五个关键成功因素展开讨论,帮助企业和...
IPD项目流程图   27  
  华为IPD(Integrated Product Development,集成产品开发)流程是华为公司在其全球化进程中逐步构建和完善的一套高效产品开发管理体系。这一流程不仅帮助华为在技术创新和产品交付上实现了质的飞跃,还为其在全球市场中赢得了显著的竞争优势。IPD的核心在于通过跨部门协作、阶段性评审和市场需求驱动,确保...
华为IPD   26  
  华为作为全球领先的通信技术解决方案提供商,其成功的背后离不开一套成熟的管理体系——集成产品开发(IPD)。IPD不仅是一种产品开发流程,更是一种系统化的管理思想,它通过跨职能团队的协作、阶段评审机制和市场需求驱动的开发模式,帮助华为在全球市场中脱颖而出。从最初的国内市场到如今的全球化布局,华为的IPD体系在多个领域展现...
IPD管理流程   53  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用