setuptools、distribution 和 pip 之间如何相互关联?

2024-01-12

我一直在通过《Learn Python The Hard Way》(第二版)一书自学 Python。在练习 46 中,它告诉我阅读 Pip、Distribute 和其他一些软件包。

pip 的文档足够清楚了。它允许我安装/卸载和升级软件包。阅读分发文档,它基本上似乎做了同样的事情:

Easily download, build, install, upgrade, and uninstall Python packages

pip 和 Distribution 之间有什么区别,它们之间有何关系?


[2014 年 10 月 TL;博士: distribute已死,使用pip, 新的setuptools,并且,对于二进制发行版,wheels。更多内容见下文。]


[原答案]

Distribute http://pypi.python.org/pypi/distribute is was a fork of the older setuptools http://pypi.python.org/pypi/setuptools so nearly all comments that follow apply equally to Distribute and setuptools. Setuptools was an attempt to fill in a number of holes in the even older Python standard library package, Distutils http://docs.python.org/3/distutils/index.html. Setuptools added functions like automatic downloads of packages via a command-line interface, easy_install, and some level of dependency management. However, a segment of the Python community is of the opinion that setuptools is too intrusive and has too much behind-the-scenes magic for some of its features.

pip是 setuptools 或 Distribute 之上的更高级别接口。它使用它们来执行许多功能,但避免了一些更有争议的功能,例如拉链鸡蛋。pip还提供了不可用的功能setuptools,例如卸载命令以及定义固定要求集并可靠地重现一组包的能力。有更完整的功能对比here http://pypi.python.org/pypi/pip.

为什么有这么多组件(还有更多,比如buildout http://www.buildout.org/)?有很多原因:解决方案必须适用于支持 Python 的所有主要平台(即 Unix-y、Windows、Mac OS X),因此构建和安装需要一个complex一系列问题;与许多开源项目一样,Python 本质上是全志愿者的,许多开发人员只是对打包和安装问题不太感兴趣;在向标准库添加未经证实的主要新功能方面存在着天然的保守主义;意见分歧等等。

目前,有一个项目正在进行中,旨在提供 Distutils 的替代品,并可能提供一些更高级别的附加组件。计划作为Python 3.3标准库发布packaging http://docs.python.org/dev/library/packaging.html包并作为旧版本 Python 的附加组件Distutils2 http://pypi.python.org/pypi/Distutils2/.

总结一下,目前的关系是:

pip -> [ setuptools | Distribute ] -> Distutils -> Python core
                                    |
    3rd party packages              |      included in Python
                                    |

更新(2012-07):在 Python 3.3 的功能代码截止之前,决定packaging尚未准备好在标准库中发布,因此已从 3.3 版本中删除。工作将继续进行Distutils2可通过 PyPI 获取,以及 Python 3.4 标准库中将包含的内容。


更新(2014-10):自上次更新此答案以来,Python 打包领域发生了进一步的变化。

  • 最重要的是,自2013年中期以来,双方之间的裂痕setuptools and distribute已痊愈并开展活动已合并 进入一个新的setuptools project http://pythonhosted.org//setuptools/merge.html. distribute就是现在 已弃用且不再维护;使用新的setuptools反而 但不要使用它的easy_install作为安装人员。

  • pip已成为事实上的、受祝福的安装工具(对于 Python 您平台的包管理器未另外提供的包) 在虚拟环境之内或之外(virtualenv http://virtualenv.readthedocs.org/en/latest/ or pyvenv https://docs.python.org/3/library/venv.html).

  • 而不是旧的setuptools bdist eggs, wheels https://pip.pypa.io/en/latest/reference/pip_wheel.html有 成为 Python 包的受祝福的二进制分发格式。

  • 从 Python 3.4 开始 http://www.python.org/dev/peps/pep-0453/, 的一个版本pip https://docs.python.org/3/library/ensurepip.html with wheel支持 现在已经和官方一起发货了python.org二进制安装程序和 源码包,预计pip也将是 包含在Python 2.7 的下一个维护版本 http://www.python.org/dev/peps/pep-0477/(2.7.9)。

  • Distutils2 and packaging现在处于休眠状态。

新版中有更多详细信息分发 Python 模块 https://docs.python.org/3/distributing/index.htmlPython 3 文档的部分和新的Python 打包用户指南 https://packaging.python.org/en/latest/index.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setuptools、distribution 和 pip 之间如何相互关联? 的相关文章

随机推荐

  • Bootstrap:居中 col-md-5?

    我觉得这是一个很奇怪的问题 但我似乎无法在网上找到解决方案 如果我有一个col md 5 我似乎无法将其居中 据我了解网格系统 如果我选择列大小 1 12 为了控制列的位置 我使用 col offset 所以如果我有一个col md 4 我
  • Dart 运行时检查 switch 语句中的类型

    我在尝试检查 Dart 中某些对象的运行时类型时发现了一些奇怪的行为 让我们举一个简单的例子 main List
  • 如何以编程方式将最小化的无模式 WinForm 带到之前显示的位置?

    为了在单击事件时将无模式 Windows 窗体恢复到其先前的位置 我尝试使用下面所示的代码 但它不起作用 如果我遗漏了什么 请告诉我 public void SetFocus this Focus this BringToFront if
  • MVC 3 从 web.config 中的 AppSettings 获取值

    在普通的 ASP NET Web 表单站点中 我会使用 web configs appsettings 将应用程序设置数据添加到站点 但是 在使用 MVC 3 时 我无法以这种方式检索设置值 首先 有 2 个 web config 文件 第
  • wx.TextCtrl(或底层 GTK+)的多线程问题

    我正在开发一个GUI来启动外部长期运行的后台程序 该后台程序可以通过 stdin 给出输入命令 并使用 stdout 和 stderr 来保持打印输出和错误消息 我在 GUI 中使用 wx TextCtrl 对象来提供输入和打印输出 我当前
  • 允许图像缩小,但不允许拉伸

    我的网站有 4 000 多个页面 每页有 10 个或更多不同大小的 jpeg 图像 我正在努力使该网站对移动设备更加友好 为此 我希望能够缩小图像以适应较小的屏幕 我知道我可以做这样的事情来表明图像可以缩小 img bodyImg widt
  • 下载图像并在 BlackBerry 上显示

    我必须开发一个网址 其中涉及从网址下载图像并在黑莓刺激器中显示 任何人都可以在这方面帮助我吗 此代码将连接给定的 URL 并返回 Bitmap 对象 public static Bitmap connectServerForImage St
  • LINQ 表达式> 相当于 .Contains()

    有谁知道如何使用 Linq 表达式创建 Contains string 函数 甚至创建谓词来完成此操作 public static Expression
  • 如何仅使用 CSS 制作选项卡? [复制]

    这个问题在这里已经有答案了 我正在寻找像这样的选项卡系统jQuery 选项卡 http jqueryui com tabs 用户可以在不同的面板之间切换以查看不同的内容 但是 我需要在不使用 JavaScript 的情况下完成此操作 以便未
  • C/C++ 是否有允许任意精度指数的任意精度浮点库?

    我正在寻找 C C 的任意精度浮点库 首选普通 C 我需要任意精度的指数 GMP 和 MPFR 使用固定大小的指数 因此它们不符合条件 我有一些解决方法的想法 但我更喜欢开箱即用的解决方案 如果指数精度可以自动调整以防止无穷大值 那将是一个
  • Django DRF,如何使用 DRF 操作正确注册自定义 URL 模式

    背景 我有一个定义了多个自定义操作的 ModelViewSet 我正在使用我的默认路由器urls py注册 URL 现在 我的视图使用默认创建的路由 例如 images images pk 为了让用户能够使用他们熟悉的资源名称来使用 API
  • Matlab 中 += 相当于什么?

    在Matlab中是否可以增加变量的值而不在语句的右侧重新声明它 AFAIK MATLAB 中没有这样的东西 这是可以理解的 http groups google com group comp soft sys matlab browse f
  • ForEach-Object -Parallel 参数集无法解析

    使用 powershell 并执行以下操作时本文 https devblogs microsoft com powershell powershell foreach object parallel feature 运行以下示例会引发错误
  • ColdFusion 并从 MySQL 获取数据

    我正在 CF 网站上工作 需要从 MySQL 表中获取数据 我可以很好地创建 CFQuery 并检查返回的记录 但如何获取返回的记录并循环它们并从每行中的特定字段获取数据 我可以写 while if end if 等 我只是不记得如何访问数
  • 指向索引处向量的指针与迭代器

    我有一个矢量 myvec我在代码中使用它来保存内存中的对象列表 我在 正常 向量中保留一个指向当前对象的指针C时尚通过使用 Object pObj myvec index 如果 myvec 没有变得足够大以至于无法在某个过程中移动 那么这一
  • 使用 NodeJS 的 IExpress 安装后批处理未立即找到 NPM

    我正在尝试使用 iExpress 在我在 NodeJS 上创建的小脚本上安装依赖项 iExpress 包只需安装 Node 包 msiexec i node msi 然后运行安装后批处理 将 Javascript 放入 UserProfil
  • API 级别 19 上 grantUriPermission 中的 IllegalArgumentException

    下面这行代码 context getApplicationContext grantUriPermission packageName uri Intent FLAG GRANT PERSISTABLE URI PERMISSION 在 A
  • 为什么 mypy 拒绝我的“混合联合”类型声明?

    While 解决 Python 聊天中的半相关问题 https chat stackoverflow com transcript message 49920836 49920836 我在 mypy 中发现了一些我不理解的行为 from t
  • Hive 执行钩子

    我需要在 Apache Hive 中挂钩自定义执行挂钩 如果有人知道该怎么做 请告诉我 我当前使用的环境如下 Hadoop Cloudera 版本 4 1 2 操作系统 Centos 谢谢 阿伦 有多种类型的挂钩 具体取决于您要在哪个阶段注
  • setuptools、distribution 和 pip 之间如何相互关联?

    我一直在通过 Learn Python The Hard Way 第二版 一书自学 Python 在练习 46 中 它告诉我阅读 Pip Distribute 和其他一些软件包 pip 的文档足够清楚了 它允许我安装 卸载和升级软件包 阅读