【问题标题】:How do setuptools, distribute, and pip relate to one another?setuptools、distribute 和 pip 如何相互关联?
【发布时间】:2012-01-22 22:02:04
【问题描述】:

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

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

轻松下载、构建、安装、升级和卸载 Python 包

点子和分发之间有什么区别,它们之间的关系如何?

【问题讨论】:

标签: python pip setuptools distribute


【解决方案1】:

[2014-10 TL;DR: distribute 已死,使用 pip,新的 setuptools,对于二进制发行版,使用 wheels。更多内容如下。]


[原答案]

Distribute is 是旧 setuptools 的一个分支,因此几乎所有后续的 cmets 都同样适用于 Distribute 和 setuptools。 Setuptools 试图填补更老的 Python 标准库包Distutils 中的许多漏洞。 Setuptools 添加了一些功能,例如通过命令行界面自动下载包,easy_install,以及某种程度的依赖管理。然而,Python 社区的一部分人认为 setuptools 过于侵入性,并且它的某些功能具有太多的幕后魔力。

pip 是 setuptools 或 Distribute 之上的更高级别的接口。它使用它们来执行其许多功能,但避免了它们的一些更具争议性的功能,例如带拉链的鸡蛋。 pip 还提供了setuptools 中没有的功能,例如卸载命令以及定义固定需求集和可靠地复制一组包的能力。还有更完整的功能对比here

为什么会有这么多组件(还有更多,比如buildout)?很多原因:解决方案必须适用于所有支持 Python 的主要平台(即 Unix-y、Windows、Mac OS X),因此构建和安装会带来一系列复杂问题;像许多开源项目一样,Python 本质上是全自愿的,许多开发人员对打包和安装问题并不那么感兴趣;在标准库中添加未经证实的主要新特性是一种自然的保守主义;意见分歧等。

目前,有一个项目正在进行中,以提供 Distutils 的替代品,并可能替代一些更高级别的附加组件。它计划在 Python 3.3 标准库中作为 packaging 包发布,并作为旧版本 Python 的附加组件作为 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 年年中以来,setuptoolsdistribute 已经痊愈,开发活动has been merged into a new setuptools projectdistribute 现在是 已弃用且不再维护;改用新的setuptools 但不要将其easy_install 用作安装程序。

  • pip 已成为事实上且受祝福的安装工具(适用于 Python 您平台的包管理器未提供的包) 虚拟环境内部或外部(virtualenvpyvenv)。

  • 而不是旧的setuptools bdist eggs, wheels 有 成为 Python 包的有福的二进制分发格式。

  • As of Python 3.4, a version of pip 支持 wheel 现在随官方python.org 二进制安装程序一起提供,并且 源包,预计pip 也将 包含在next maintenance release of Python 2.7 (2.7.9) 中。

  • Distutils2packaging 现在处于休眠状态。

Python 3 文档的新 Distributing Python Modules 部分和新的 Python Packaging User Guide 中的更多详细信息。

【讨论】:

  • 这是一个很好的解释,谢谢!我来自 PHP 背景,所以你必须了解多少重叠的模块/包。
  • 做同样的教程,你的建议很有帮助。谢谢内德。
  • 自最初的答案以来,Python 打包世界发生了很多的变化。有关更多最新信息,请参阅最新更新。
猜你喜欢
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 2012-07-13
  • 2013-07-30
  • 1970-01-01
  • 2010-10-13
相关资源
最近更新 更多