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

2024-03-03

情况

我正在尝试将开源库移植到 Python 3。(SymPy http://sympy.org/,如果有人想知道的话。)

所以,我需要跑2to3在为 Python 3 构建时自动进行。为此,我需要使用distribute。因此,我需要移植当前系统,(根据文档测试)是distutils.

问题

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

问题

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


截至 2022 年 5 月,这个问题的大多数其他答案都已经过时了好几年。当您遇到有关 Python 打包问题的建议时,请记住查看发布日期,不要相信过时的信息。

The Python 打包用户指南 https://packaging.python.org/值得一读。每个页面都会显示“最后更新”日期,因此您可以检查手册的最新情况,而且内容相当全面。事实上,它托管在 Python 软件基金会的 python.org 子域上,这更增加了它的可信度。这项目概要 https://packaging.python.org/en/latest/key_projects/页面在这里特别相关。

工具总结:

以下是 Python 打包环境的摘要:

支持的工具:

  • setuptools是为了克服 Distutils 的限制而开发的,并且不包含在标准库中。它引入了一个名为的命令行实用程序easy_install。它还介绍了setuptools可以导入到你的Python包中setup.py脚本,以及pkg_resources可在代码中导入的 Python 包,以查找随发行版安装的数据文件。它的陷阱之一是它对distutilsPython 包。它应该可以很好地配合pip. 它会定期发布。 https://github.com/pypa/setuptools/releases

    • Official docs https://setuptools.readthedocs.io/en/latest/ | Pypi page https://pypi.python.org/pypi/setuptools | GitHub repo https://github.com/pypa/setuptools | setuptools section of Python Package User Guide https://packaging.python.org/key_projects/#setuptools
  • scikit-build是一个改进的构建系统生成器,它在内部使用 CMake 来构建已编译的 Python 扩展。因为 scikit-build 不是基于 distutils,所以它实际上没有任何限制。当 ninja-build 存在时,scikit-build 编译大型项目的速度比替代方案快三倍以上。它应该可以很好地配合pip.

    • Official docs http://scikit-build.readthedocs.io/en/latest/ | Pypi page https://pypi.org/project/scikit-build/ | GitHub repo https://github.com/scikit-build/scikit-build | scikit-build section of Python Package User Guide https://packaging.python.org/key_projects/#scikit-build
  • distlib是一个库,提供由更高级别的工具使用的功能,例如pip.

    • Official Docs http://pythonhosted.org/distlib/ | Pypi page https://pypi.org/project/distlib | Bitbucket repo https://bitbucket.org/pypa/distlib | distlib section of Python Package User Guide https://packaging.python.org/key_projects/#distlib
  • packaging也是一个提供高级工具使用的功能的库,例如pip and setuptools

    • Official Docs https://packaging.pypa.io/ | Pypi page https://pypi.org/project/packaging | GitHub repo https://github.com/pypa/packaging | packaging section of Python Package User Guide https://packaging.python.org/key_projects/#packaging

已弃用/废弃的工具:

  • distutils仍然包含在 Python 标准库中,但从 Python 3.10 开始被视为已弃用。它对于简单的 Python 发行版很有用,但缺乏功能。它介绍了distutils可以导入到你的Python包中setup.py script.

    • Official docs https://docs.python.org/3/library/distutils.html | distutils section of Python Package User Guide https://packaging.python.org/key_projects/#distutils
  • distribute是一个叉子setuptools。它共享相同的命名空间,因此如果您安装了 Distribute,import setuptools实际上会导入使用 Distribute 分发的包。Distribute 已合并回 Setuptools 0.7,因此您不再需要使用 Distribute。其实Pypi上的版本只是安装Setuptools的兼容层。

  • distutils2是试图充分利用distutils, setuptools and distribute并成为Python标准库中包含的标准工具。我们的想法是distutils2将针对旧的 Python 版本进行分发,并且distutils2将被重命名为packaging对于 Python 3.3,它将包含在其标准库中。然而,这些计划并没有按预期进行,目前,distutils2是一个废弃的项目。最新版本发布于 2012 年 3 月,其 Pypi 主页终于更新以反映其死亡。

Others:

还有其他工具,如果您有兴趣,请阅读项目概要 https://packaging.python.org/en/latest/key_projects/在 Python 打包用户指南中。我不会全部列出,以免重复该页面,并保持答案与问题相匹配,这只是关于distribute, distutils, setuptools and distutils2.

推荐:

如果这一切对你来说都是新的,并且你不知道从哪里开始,我会推荐学习setuptools, 随着pip and virtualenv,所有这些都可以很好地协同工作。

如果你正在寻找virtualenv,您可能对这个问题感兴趣:有什么区别venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, etc? https://stackoverflow.com/q/41573587/247696。 (是的,我知道,我和你一起呻吟。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

distribution、distutils、setuptools 和 distutils2 之间的区别? 的相关文章

随机推荐