Python中distutils包弃用警告的修复方法
Python distutils弃用警告修复方案
这个警告是Python官方的预期提示:从Python 3.10版本开始标记标准库内置的distutils为弃用状态,3.12版本已正式将其从标准库中移除,官方默认替代方案为setuptools,具体修复方式分场景处理:
场景1:自身代码直接引用distutils
- 直接替换导入路径,绝大多数
distutils的API在setuptools中有兼容实现,常见导入替换示例:
涉及版本判断的逻辑不要继续沿用旧的# 旧写法(会触发警告) from distutils.core import setup, Extension from distutils.version import LooseVersion, StrictVersion from distutils.util import strtobool # 新写法 from setuptools import setup, Extension from packaging.version import Version # 替代旧的版本判断类 # strtobool这类工具函数可以从setuptools._distutils.util临时导入,也可以自行实现简单逻辑LooseVersion/StrictVersion,直接用packaging库的Version类即可,这个库是Python打包生态的基础依赖,几乎所有Python环境都默认预装。 - 临时兼容方案(仅适合短期过渡,不推荐长期使用):如果暂时没有精力重构代码,可以在代码最开头加警告过滤规则,或者启动时加环境变量压制警告:
# 代码内过滤,放在所有导入逻辑最前面 import warnings warnings.filterwarnings("ignore", message=".*distutils package is deprecated.*")# 命令行启动时过滤 PYTHONWARNINGS="ignore:.*distutils package is deprecated.*" python your_script.py
场景2:未直接调用distutils,运行第三方代码/安装依赖时触发警告
- 第一步先升级环境内的
setuptools到最新版本,旧版本setuptools自身会调用distutils触发警告:pip install --upgrade setuptools pip - 升级触发警告对应的第三方依赖包,绝大多数主流Python库都已经在2023年前后的版本中完成了distutils适配,升级到最新稳定版即可消除警告。
- 如果是自己打包项目时执行
python setup.py xxx类命令触发警告,直接弃用直接调用setup.py的旧构建方式,改用官方推荐的build模块:pip install --upgrade build python -m build
注意:Python 3.12+版本不要尝试安装非官方移植的distutils包来规避问题,这类第三方移植版兼容性差,很容易出现包安装路径错误、C扩展编译失败等隐性问题,按官方方案迁移到setuptools等替代库是唯一稳妥的长期方案。如果需要查询更细粒度的API迁移映射关系,可以查阅PEP 632的相关说明。
内容的提问来源于stack exchange,提问作者Anaswara viswanath
相关产品推荐
相关产品推荐

