情况 我正在尝试将开放源代码库移植到Python3。(SymPy,如果有人想知道的话。)
因此,2to3在为Python 3构建时,我需要自动运行。为此,我需要使用distribute。因此,我需要移植当前的系统(根据doctest)是distutils。
distribute
doctest
distutils
问题 不幸的是,我不知道什么是这些模块-之间的区别distutils,distribute,setuptools。该文档最好是粗略的,因为它们似乎是彼此的一个分支,旨在在大多数情况下兼容(但实际上不是全部)……等等。
distutils,distribute,setuptools
问题 有人可以解释差异吗?我应该用什么?什么是最现代的解决方案?(Distribute顺便说一句,我也很感谢一些有关移植到的指南,但这超出了问题的范围……)
Distribute
截至2017年1月,此问题的所有其他答案都至少已过期两年。当你遇到有关Python包装问题的建议时,请记住查看发布日期,并且不要相信过时的信息。
《Python包装用户指南》值得一读。每个页面上都显示有“上次审阅”日期,因此你可以检查本手册的新近度,并且内容全面。它托管在Python Software Foundation的python.org的子域中,这本身就增加了可信度。“ 项目摘要”页面在这里尤其重要。
工具摘要: 以下是2017年1月Python封装格局的摘要:
支持的工具: - Distutils仍然是使用Python打包的标准工具。它包含在标准库中(Python 2和Python 3.0至3.6)。它对于简单的Python发行版很有用,但缺少功能。它介绍了distutils可以在setup.py脚本中导入的Python包。
官方文档 | distutils“ Python软件包用户指南”部分 Setuptools是为克服Distutils的限制而开发的,它不包含在标准库中。它引入了一个名为的命令行实用程序easy_install。它还介绍了setuptools可以在setup.py脚本中导入的pkg_resourcesPython包,以及可以在代码中导入的Python包,以查找随发行版一起安装的数据文件。它的陷阱之一是它猴子修补了distutilsPython包。它应该与配合良好pip。它可以看到常规版本。
Distribute是Setuptools的一个分支。它共享相同的名称空间,因此,如果你安装了Distribute,则import setuptools实际上将导入使用Distribute分发的软件包。分发已合并回Setuptools 0.7中,因此你不再需要使用分发。实际上,Pypi上的版本只是安装Setuptools的兼容层。
Distutils2试图充分利用Distutils,Setuptools和Distribute,并成为Python标准库中包含的标准工具。想法是将Distutils2分发给旧的Python版本,并将Distutils2重命名packaging为Python 3.3,并将其包含在其标准库中。这些计划没有按计划进行,但是,当前,Distutils2是一个废弃的项目。最新版本于2012年3月发布,其Pypi主页最终已更新以反映其死亡。
Alpha软件:
Distlib是一种工具,旨在实现以前工具功能的子集,但仅实现在公认的PEP中非常明确定义的功能。它是PyPA(Python打包机构)的工具之一,希望有朝一日最终将其包含在Python标准库中。它仍然被认为是alpha软件,因此最终用户要当心。
还有更多工具(例如Bento),但我不会提及它们,因为它们对于本答案过分模糊,利基,太早或尚未开发,否则它们不是直接的替代品。
建议:
因此,总而言之,在所有这些选项中,我建议你使用Setuptools,除非你的要求非常基础并且只需要Distutils。Setuptools与Virtualenv和Pip(我强烈推荐的工具)配合使用非常好。Virtualenv和Pip都可以被认为是官方的,因为它们是PyPA的一部分,并且Python 3已发布ensurepip(可帮助你pip在某些系统上安装)。
如果你正在寻找进入VIRTUALENV,你可能有兴趣在这样一个问题:是什么区别venv,pyvenv,pyenv,virtualenv,virtualenvwrapper,等?。