setuptools、distribute和pip之间有什么关系?

61

我通过《笨办法学Python》(第二版)自学Python。在第46练习中,它告诉我要了解Pip、Distribute和其他几个包。

Pip文档已经讲得很清楚了。它允许我安装/卸载和升级软件包。阅读Distribute的文档,它基本上似乎做着同样的事情:

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

Pip和Distribute之间有什么区别,它们之间如何相互关联?


相关:https://dev59.com/wmw15IYBdhLWcg3w3vpe - guettli
1个回答

87

[2014-10 TL;DR: distribute已经过时,使用pip、新的setuptools以及二进制分发中的wheels。详情见下文。]


[Translated answer]

分发 曾经是setuptools的一个分支,因此几乎所有后续的评论同样适用于Distribute和setuptools。Setuptools旨在填补更古老的Python标准库包Distutils中的一些空白。Setuptools添加了一些函数,例如通过命令行界面 easy_install 实现自动下载软件包,以及一定程度的依赖关系管理。然而,Python社区的一部分人认为setuptools过于具有侵入性,并且某些功能的背后有过多的魔法。

pip是在setuptools或Distribute之上的更高级接口。它使用它们执行许多功能,但避免了一些更具争议性的功能,例如zipped eggs。 pip还提供了setuptools中不可用的功能,例如卸载命令和定义固定要求集并可靠地复制一组软件包的能力。这里有一个更完整的功能比较here

为什么会有这么多组件(还有更多,例如buildout)?有很多原因:解决方案必须适用于Python支持的所有主要平台(即Unix-y、Windows、Mac OS X),因此构建和安装涉及到一套复杂的问题;与许多开源项目一样,Python基本上是全志愿者的,许多开发人员对打包和安装问题并不感兴趣;在标准库中添加新的未经验证的主要功能存在自然保守性;意见不同等等。

目前正在进行一个项目,旨在提供Distutils的替代方案,可能也适用于一些更高级别的附加组件。计划将其作为packaging软件包发布在Python 3.3标准库中,并作为Distutils2的附加组件发布给旧版本的Python用户。

总之,当前的关系是:

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之间的分歧已经得到解决,开发活动已经合并到一个新的setuptools项目中distribute现已弃用且不再维护;请使用新的setuptools,但不要将其easy_install作为安装程序。

  • pip已成为事实上和被祝福的安装程序工具(用于Python软件包,否则由您平台的软件包管理器提供),无论在虚拟环境内还是外部(virtualenvpyvenv)。

  • 与旧的setuptools bdist eggs不同,wheels已成为Python软件包的受祝福的二进制分发格式。

  • 从Python 3.4开始, 一个带有wheel支持的版本pip现在随官方的python.org二进制安装程序和源代码包一起发布,预计pip也将被包含在Python 2.7的下一个维护版本(2.7.9)中。

  • Distutils2packaging现已休眠。

Python 3文档中的分发Python模块部分和新的Python打包用户指南提供更多详细信息。


2
这是一个很棒的解释,谢谢!我来自PHP背景,因此对于需要理解的重叠模块/包数量感到有些不知所措。 - Ben G
1
做同样的教程,你的建议帮了很多忙。谢谢 Ned。 - Drew Verlee
自原回答以来,Python打包领域已经发生了许多变化。请参阅最新更新以获取更加实时的信息。 - Ned Deily

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接