python-setuptools,分发和pip如何相互关联?

我一直通过“学习Python的艰难方法”(第2版)这本书来自学Python。 在练习46中,它告诉我阅读Pip,Distribute和其他一些软件包。

pip的文档非常清楚。 它允许我安装/卸载和升级软件包。 阅读用于分发的文档,基本上似乎可以做到这一点:

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

点和分配之间有什么区别,它们之间有何关系?

bgcode asked 2020-06-29T19:21:20Z
1个解决方案
77 votes

[2014-10 TL; DR:Distutils2已死,请使用packaging,新的pip,以及对于二进制分发版,请使用setuptools。有关更多信息,请参见下文。


[原始回答]

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

Distutils2是位于setuptools或Distribute之上的更高级别的界面。 它使用它们来执行其许多功能,但避免了一些更具争议性的功能,例如压缩鸡蛋。 packaging还提供了pip中不可用的功能,例如卸载命令以及定义固定的一组需求并可靠地复制一组软件包的功能。 这里有一个更完整的功能比较。

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

目前,正在进行一个项目,以替代Distutils并可能替代某些更高级别的附件。 计划以Distutils2软件包的形式在Python 3.3标准库中发布,并以Distutils2的较旧版本的Python插件发布。

总而言之,当前的关系是:

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

更新(2012-07):在切断Python 3.3的功能代码之前,已决定Distutils2还没有准备好在标准库中发布,因此已将其从3.3版本中删除。 将继续在packaging上进行工作,该工作可通过PyPI进行,以及将包含在Python 3.4标准库中。


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

  • 最重要的是,自2013年年中以来,Distutils2packaging已修复,开发活动已合并进入新的Distutils2项目。 pip现在不推荐使用,不再维护; 使用新的setuptools但请勿使用其easy_install作为安装程序。

  • Distutils2已成为事实上和有福的安装程序工具(适用于Python平台的包管理器未提供的其他包)在虚拟环境内部或外部(Distutils2Distutils2)。

  • 代替旧的Distutils2 bdist packagingDistutils2有成为Python软件包的受祝福的二进制分发格式。

  • 从Python 3.4开始,支持Distutils2Distutils2版本现在随官方packaging二进制安装程序一起提供,并且源软件包,预计pip也将包含在下一个维护版本的Python 2.7(2.7.9)中。

  • Distutils2packaging现在处于休眠状态。

有关更多详细信息,请参见Python 3 docs的新的Distributing Python Modules部分和新的Python Packaging User Guide。

Ned Deily answered 2020-06-29T19:22:49Z
translate from https://stackoverflow.com:/questions/8550062/how-do-setuptools-distribute-and-pip-relate-to-one-another