.jpg)
我正在尝试将开源库移植到 Python 3。(SymPy,如果有人想知道的话。
因此,我需要在构建 Python 3 时自动运行。为此,我需要使用 .因此,我需要移植当前系统,它(根据文档测试)是.2to3distributedistutils
不幸的是,我不确定这些模块之间有什么区别—, , .文档最好是粗略的,因为它们似乎都是彼此的分支,旨在在大多数情况下兼容(但实际上,不是全部)……等等,等等。distutilsdistributesetuptools
有人可以解释一下差异吗?我应该使用什么?什么是最现代的解决方案?(顺便说一句,我也希望有一些关于移植到的指南,但这有点超出了问题的范围……Distribute

截至 2022 年 <> 月,这个问题的大多数其他答案已经过时了好几年。当你遇到关于Python打包问题的建议时,请记住查看发布日期,不要相信过时的信息。
Python 打包用户指南值得一读。每页都显示“上次更新”日期,因此您可以查看手册的新近度,并且非常全面。它托管在Python软件基金会 python.org 的子域上的事实只是增加了它的可信度。项目摘要页面在这里尤其重要。
以下是 Python 打包格局的摘要:
setuptools的开发是为了克服Distutils的局限性,并且不包含在标准库中。它引入了一个名为 的命令行实用程序。它还引入了可以在脚本中导入的 Python 包,以及可以在代码中导入以查找随发行版一起安装的数据文件的 Python 包。它的一个缺点是它修补了Python包。它应该与 配合使用。它看到定期发布。easy_installsetuptoolssetup.pypkg_resourcesdistutilspip
设置工具部分scikit-build是一个改进的构建系统生成器,它在内部使用CMake来构建编译的Python扩展。因为scikit-build不是基于distutils的,所以它没有任何限制。当存在ninja-build时,scikit-build可以编译大型项目,速度是替代方案的三倍以上。它应该与 配合使用。pip
scikit-build 部分Distlib 是一个库,它提供由更高级别的工具(如 )使用的功能。pip
distlib 部分打包也是一个库,提供更高级别工具使用的功能,例如pipsetuptools
打包部分distutils仍然包含在Python的标准库中,但从Python 3.10开始被认为是不推荐使用的。它对于简单的Python发行版很有用,但缺乏功能。它介绍了可以在脚本中导入的 Python 包。distutilssetup.py
distutils 部分分发是 的一个分支。它共享相同的命名空间,因此如果您安装了 Distribute,实际上将导入使用 Distributed 分发的包。Distributed 已合并回 Setuptools 0.7,因此您不再需要使用 Distribution。实际上,Pypi上的版本只是一个安装Setuptools的兼容层。setuptoolsimport setuptoolsdistutils2 试图充分利用 ,并成为 Python 标准库中包含的标准工具。这个想法是,它将为旧的Python版本分发,并将其重命名为Python 3.3,这将包含在其标准库中。然而,这些计划并没有按预期进行,目前,distutils2是一个被遗弃的项目。最新版本是在2012年<>月,其Pypi主页终于更新以反映其死亡。distutilssetuptoolsdistributedistutils2distutils2packaging还有其他工具,如果您有兴趣,请阅读 Python 打包用户指南中的项目摘要。我不会一一列出,不重复该页面,并保持答案与问题相匹配,问题只是关于、和。distributedistutilssetuptoolsdistutils2
如果所有这些对您来说都是新的,并且您不知道从哪里开始,我建议您学习设置工具以及 和 ,它们都可以很好地协同工作。pipvirtualenv
如果您正在研究 ,您可能会对这个问题感兴趣:、、、、 等之间有什么区别?(是的,我知道,我和你一起呻吟。virtualenvvenvpyvenvpyenvvirtualenvvirtualenvwrapper

我是一个distutils维护者和distutils2/打包贡献者。我在ConFoo 2011上做了一个关于Python打包的演讲,现在我正在编写它的扩展版本。它尚未发布,因此以下是有助于定义事物的摘录。
打包在 Python 3.3+ 标准库中,或 distutils2 打包在 2.4+ 和 3.1–3.2 中。(向后移植即将推出。更多信息:
我希望尽快完成我的指南,它将包含有关每个图书馆的优点和缺点的更多信息以及过渡指南。

注意:答案已弃用,分发现已过时。自从 Python 打包管理局成立以来,这个答案不再有效,并且已经做了很多清理工作。
是的,你明白了。? 我认为此时首选的软件包是 Distribute,它是 setuptools 的一个分支,它是 distutils(原始打包系统)的扩展。安装工具没有得到维护,所以被分叉并重命名,但是在安装时它使用安装工具的包名称!我认为大多数Python开发人员现在都使用Distribute,我可以肯定地说我这样做了。
模板简介:该模板名称为【Python 中 distribute、distutils、setuptools 和 distutils2 之间的区别?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Python】栏目查找您需要的精美模板。