如何完全替代Python 3.10中已弃用的distutils模块
一、distutils到setuptools的代码替换规则
你提到的导入替换逻辑完全成立,PEP 632里列出的distutils子模块统一替换为setuptools下的对应模块即可,具体替换规则如下:
import distutils.ccompiler→import setuptools.ccompilerfrom distutils.cmd import Command→from setuptools.cmd import Commandimport distutils.command→import setuptools.commandimport distutils.config→import setuptools.configfrom distutils.core import Distribution→from setuptools.core import Distributionimport distutils.errors→import setuptools.errors
对于PEP 632迁移建议里没有提到的distutils.core.setup和distutils.core.Extension,直接替换为setuptools下的同名对象即可:
from distutils.core import setup, Extension→from setuptools import setup, Extension
两者的API接口完全兼容,不需要修改后续的调用逻辑。
另外对于建议用标准库替代的接口,比如distutils.util.get_platform,直接替换为platform模块的对应能力即可,你可以根据实际需求选择platform.system()、platform.machine()或者platform.platform()等接口实现相同功能。
二、setuptools的定位与使用规则
1. 是否属于Python标准发行版
setuptools不属于Python标准库,所以不会出现在官方标准库的模块索引中。但从Python 3.4开始,官方发布的Python安装包默认会预装setuptools和pip,大部分普通用户的环境中都默认存在这个包。不过部分精简版的Python发行版(比如部分Linux操作系统源里自带的裁剪版Python)可能会把setuptools拆成单独的软件包,需要手动安装。
2. 安装与使用要求
如果用户环境中没有预装setuptools,直接执行pip install setuptools即可完成安装。目前setuptools没有被纳入标准库的计划,它会继续作为PyPA维护的第三方打包工具存在。
3. setup.py的使用现状
当前主流的Python打包规范已经不再推荐直接运行python setup.py install、python setup.py develop这类命令,对应的替代方案是:
- 安装本地开发版本:执行
pip install -e . - 构建分发包:使用
python -m build命令
所有涉及setup.py的操作都会由pip、build等工具自动处理,工具会自动解决setuptools的依赖问题,不需要用户手动提前安装。
内容的提问来源于stack exchange,提问作者Alan

