distribute、distutils、setuptools和distutils2之间的区别?

发布于 2021-02-02 23:15:21

情况
我正在尝试将开放源代码库移植到Python3。(SymPy,如果有人想知道的话。)

因此,2to3在为Python 3构建时,我需要自动运行。为此,我需要使用distribute。因此,我需要移植当前的系统(根据doctest)是distutils

问题
不幸的是,我不知道什么是这些模块-之间的区别distutils,distribute,setuptools。该文档最好是粗略的,因为它们似乎是彼此的一个分支,旨在在大多数情况下兼容(但实际上不是全部)……等等。

问题
有人可以解释差异吗?我应该用什么?什么是最现代的解决方案?(Distribute顺便说一句,我也很感谢一些有关移植到的指南,但这超出了问题的范围……)

关注者
0
被浏览
78
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    截至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包。

    官方文档 | distutilsPython软件包用户指南”部分
    Setuptools是为克服Distutils的限制而开发的,它不包含在标准库中。它引入了一个名为的命令行实用程序easy_install。它还介绍了setuptools可以在setup.py脚本中导入的pkg_resourcesPython包,以及可以在代码中导入的Python包,以查找随发行版一起安装的数据文件。它的陷阱之一是它猴子修补了distutilsPython包。它应该与配合良好pip。它可以看到常规版本。

    • scikit-build是一个改进的构建系统生成器,它内部使用CMake来构建编译的Python扩展。由于scikit-build不是基于distutils的,因此它实际上没有任何限制。如果存在ninja-build,则scikit-build可以比其他方法快三倍地编译大型项目。它应该与配合良好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,等?。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看