Python distribute、distutils、setuptools和distutils2之间的区别? 形势
我正在尝试将一个开源库移植到Python 3。(,如果有人想知道的话。) 因此,在构建Python3时,我需要自动运行Python distribute、distutils、setuptools和distutils2之间的区别? 形势,python,packaging,setuptools,distutils,distribute,Python,Packaging,Setuptools,Distutils,Distribute,我正在尝试将一个开源库移植到Python 3。(,如果有人想知道的话。) 因此,在构建Python3时,我需要自动运行2to3。为此,我需要使用distribute。因此,我需要移植当前系统,它(根据doctest)是distutils 问题 不幸的是,我不确定这些模块之间有什么区别-distutils,distribute,setuptools。文档尽可能粗略,因为它们似乎都是彼此的一个分支,旨在在大多数情况下(但实际上并非所有情况下)兼容……等等 问题 有人能解释一下区别吗?我应该用什么
2to3
。为此,我需要使用distribute
。因此,我需要移植当前系统,它(根据doctest)是distutils
问题 不幸的是,我不确定这些模块之间有什么区别-
distutils
,distribute
,setuptools
。文档尽可能粗略,因为它们似乎都是彼此的一个分支,旨在在大多数情况下(但实际上并非所有情况下)兼容……等等
问题
有人能解释一下区别吗?我应该用什么?最现代的解决方案是什么?(顺便说一句,我也希望您能提供一些关于移植到
发行版的指南,但这有点超出了问题的范围……注意:回答不推荐,现在发行过时。自从Python打包机构成立以来,这个答案就不再有效了,并且已经做了大量清理工作
是的,你明白了-o我认为目前首选的软件包是,它是setuptools的分支,是distutils(原始打包系统)的扩展。未维护Setuptools,因此对其进行了分叉和重命名,但在安装时使用了Setuptools的软件包名称!我认为大多数Python开发人员现在都使用Distribute,我可以肯定地说我确实使用Distribute。我是Distributils维护者和Distributils2/打包贡献者。我在Confo 2011上做了一个关于Python打包的演讲,现在我正在编写它的扩展版本。它还没有出版,所以这里有一些摘录,可以帮助定义一些东西
- Distutils是用于包装的标准工具。对于简单的需求来说,它工作得相当好,但是它是有限的,而且扩展起来也不是微不足道的
- Setuptools是一个源于填补缺失的distutils功能和探索新方向的项目。在某些子单元中,这是事实上的标准。它使用了Python核心开发人员不喜欢的猴子补丁和魔术
- Distribute是一种设置工具,开发人员开始时觉得它的开发速度太慢,不可能对它进行改进。当同一组人启动distutils2时,它的发展相当缓慢。2013年8月更新:distribute重新合并到setuptools中并已停止
- Distutils2是一个新的distutils库,最初作为distutils代码库的一个分支,从安装工具(其中一些在PEP中进行了详细讨论)中获得了好的想法,并且是一个受pip启发的基本安装程序。用于导入Distutils2的实际名称是Python 3.3+标准库中的
packaging
,或2.4+和3.1–3.2中的Distutils2
。(一个后端口将很快可用。)Distutils2没有发布Python 3.3版本,因此被搁置
更多信息:
我希望很快完成我的指南,它将包含关于每个图书馆的优点和缺点的更多信息以及一个过渡指南。我意识到我已经回答了你的第二个问题,但没有回答你原始问题中毫无疑问的假设:
我正在尝试将一个开源库(SymPy,如果有人想知道的话)移植到Python3。到
要做到这一点,我需要在构建Python3时自动运行2to3
你可以,不需要。其他策略见
要做到这一点,我需要使用distribute
您可以:)distutils支持代码(而不是docstring)的构建时2to3转换,其方式与distutils不同:截至2020年3月,此问题的大多数其他答案都已过时几年。当您遇到关于Python打包问题的建议时,请记住查看发布日期,不要相信过时的信息
这本书值得一读。每一页都会显示“上次更新”的日期,因此您可以查看手册的最新版本,而且非常全面。它在Python软件基金会的Python .Org的子域上托管的事实只是增加了信任。这一页在这里特别相关
工具概述:
下面是Python打包环境的总结:
支持的工具:
distutils
仍然是Python中打包的标准工具。它包含在标准库(Python 2和Python 3)中。它对于简单的Python发行版很有用,但缺少特性。它引入了可以在setup.py
脚本中导入的distutils
Python包
- |
setuptools
是为克服Distutils的局限性而开发的,不包含在标准库中。它引入了一个名为easy\u install
的命令行实用程序。它还介绍了可以导入到setup.py
脚本中的setuptools
Python包,以及可以导入到代码中的pkg_resources
Python包,以定位随发行版安装的数据文件。它的一个缺陷是它修补了distutils
Python包。它应该与pip
配合使用
- | | |
scikit build
是一个改进的构建系统生成器,它在内部使用CMake构建编译后的Python扩展。因为scikit构建不基于distutils,所以它实际上没有任何限制。当存在忍者版本时,scikit版本编译大型项目的速度比alternativ快三倍以上