gpt4 book ai didi

python - 分发、distutils、setuptools 和 distutils2 之间的区别?

转载 作者:IT老高 更新时间:2023-10-28 12:00:57 24 4
gpt4 key购买 nike

情况

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

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

问题

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

问题

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

最佳答案

截至 2020 年 3 月,该问题的大多数其他答案已过时数年。当您遇到有关 Python 打包问题的建议时,请记住查看发布日期,不要相信过时的信息。

Python Packaging User Guide值得一读。每个页面都显示了“上次更新”日期,因此您可以查看手册的新近度,而且非常全面。它托管在 Python 软件基金会的 python.org 子域上的事实只是增加了它的可信度。 Project Summaries页面在这里特别相关。

工具总结:

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

支持的工具:

  • distutils 仍然是 Python 中打包的标准工具。它包含在标准库(Python 2 和 Python 3)中。它对于简单的 Python 发行版很有用,但缺乏功能。它介绍了 distutils可以在您的 setup.py 中导入的 Python 包脚本。
  • Official docs | distutils section of Python Package User Guide
  • setuptools 开发是为了克服 Distutils 的限制,并且不包含在标准库中。它引入了一个名为 easy_install 的命令行实用程序。 .它还推出了setuptools可以在您的 setup.py 中导入的 Python 包脚本,以及 pkg_resources可以在代码中导入的 Python 包,以定位随发行版安装的数据文件。它的问题之一是它对 distutils 进行了猴子修补。 python 包。它应该适用于 pip . It sees regular releases.
  • Official docs | Pypi page | GitHub repo | setuptools section of Python Package User Guide
  • scikit-build 是一个改进的构建系统生成器,它在内部使用 CMake 来构建已编译的 Python 扩展。因为 scikit-build 不是基于 distutils,所以它实际上没有任何限制。当 ninja-build 存在时,scikit-build 可以比替代方案快三倍以上的速度编译大型项目。它应该适用于 pip .
  • Official docs | Pypi page | GitHub repo | scikit-build section of Python Package User Guide
  • distlib 是一个库,它提供了由 pip 等高级工具使用的功能。 .
  • Official Docs | Pypi page | Bitbucket repo | distlib section of Python Package User Guide
  • packaging 也是一个提供更高级工具使用的功能的库,如 pipsetuptools
  • Official Docs | Pypi page | GitHub repo | packaging section of Python Package User Guide

  • 弃用/废弃的工具:
  • distribute setuptools 的 fork .它共享相同的命名空间,所以如果你安装了 Distribute,import setuptools实际上会导入随 Distribute 分发的包。 分发已合并回 Setuptools 0.7 ,因此您不再需要使用 Distribute。实际上,Pypi 上的版本只是一个安装 Setuptools 的兼容层。
  • distutils2 试图充分利用 distutils , setuptoolsdistribute并成为 Python 标准库中包含的标准工具。这个想法是distutils2将为旧的 Python 版本分发,并且 distutils2将重命名为 packaging对于 Python 3.3,它将包含在其标准库中。然而,这些计划并未按预期进行,目前, distutils2是一个废弃的项目 .最新版本是在 2012 年 3 月,它的 Pypi 主页终于更新以反射(reflect)它的死亡。

  • 其他:

    还有其他工具,有兴趣的可以阅读 Project Summaries在 Python 打包用户指南中。我不会一一列出,也不会重复那个页面,并保持答案与问题相匹配,这只是关于 distribute , distutils , setuptoolsdistutils2 .

    推荐:

    如果所有这些对您来说都是陌生的,并且您不知道从哪里开始, 我建议学习 setuptools ,以及 pipvirtualenv ,所有这些都可以很好地协同工作。

    如果您正在查看 virtualenv ,您可能对这个问题感兴趣: What is the difference between venv , pyvenv , pyenv , virtualenv , virtualenvwrapper , etc? . (是的,我知道,我和你一起呻吟。)

    关于python - 分发、distutils、setuptools 和 distutils2 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6344076/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com