如何完全替代 3.10 中已弃用的 distutils?

问题描述 投票:0回答:1

根据 PEP 632

distutils
将被正式标记为已弃用,并在 Python 3.12 中将其删除。我的产品很快就会支持 Python 3.10,我不想忍受弃用警告,所以我想现在删除对
distutils
的引用。

但是,我找不到有关如何正确执行此操作的明确文档。 PEP 中的 Migration Advice 出奇地粗略,我还没有找到

distutils
的标准文档,或者替换
setuptools
所需的任何模块(例如
distutils
?),这可以让我填补差距。我自己也无法从源代码中弄清楚。

具体来说,“迁移建议”部分说:

对于这些模块或类型,

setuptools
是最好的替代品:

  • distutils.ccompiler
  • distutils.cmd.Command
  • distutils.command
  • distutils.config
  • distutils.core.Distribution
  • distutils.errors

...

对于这些模块或函数,请使用所示的标准库模块:

...

  • distutils.util.get_platform
    — 使用
    platform
    模块

替代

setuptools
究竟如何运作?例如,类似
import distutils.command
的代码是否应该替换为
import setuptools.command
?同时,对于此处未列出的
distutils.core.setup
distutils.core.Extension
的使用,我该怎么办?

此外:

setuptools
不会出现在标准文档中的modulesindex列表下,但我确实在我的
Lib/site-packages
文件夹中看到它。它实际上是标准发行版的一部分吗?

如果没有,

setuptools
具体应该如何安装和使用?它是否有望成为标准发行版的一部分?客户是否需要先通过 Pip 安装它,然后才能运行导入
setuptools
的 setup.py 脚本?或者是人们根本不应该再运行setup.py


这个问题从开发库的角度解决了这个问题。对于安装库,请参阅为什么我收到错误 ModuleNotFoundError:没有名为“distutils”的模块?

python-3.x distutils
1个回答
5
投票
  • 是的,setuptools 可以完全替代 distutils 的所有功能
  • distutils.core.setup 映射到 setuptools.setup
  • distutils.core.Extension 映射到 setuptools.Extension
  • setuptools 不是标准库的一部分(因此文档中没有它),但它是标准 python.org 发行版的一部分。
  • 一些发行版选择将 setuptools 和 pip 从默认的 python 包中分离出来,因为它们不假设您将使用 python 来编写代码,但是一些系统工具需要 python(apt 等)。如果您计划使用发行版作为开发工具,则需要从发行版存储库安装 pip 和 setuptools。
© www.soinside.com 2019 - 2024. All rights reserved.