Python 3.12 升级:三个报错,一个只发警告

举报
yd_286480595 发表于 2026/11/07 10:35:41 2026/11/07
【摘要】 11 月第一周,构建镜像从 `python:3.11-slim` 换成 `python:3.12-slim`。本地 `docker build` 一次通过,CI 挂在 `pip install`。下面

11 月第一周,构建镜像从 python:3.11-slim 换成 python:3.12-slim。本地 docker build 一次通过,CI 挂在 pip install。下面是三个报错,按出现顺序。

三个报错

第一个:ModuleNotFoundError: No module named 'distutils'。distutils 在 3.12 被移除,但 setuptools 65+ 自带 shim,正常不该报。问题在 Dockerfile 里两年前加的一行 ENV SETUPTOOLS_USE_DISTUTILS=stdlib——强制用标准库那份。3.11 里标准库还有,这行有效;3.12 里没了,它就成了隐患。删掉即好。

第二个:ModuleNotFoundError: No module named 'imp'。出在内部包 plugin_loader.py:31 的 imp.load_source。改成 importlib.util.spec_from_file_location 加 module_from_spec、exec_module,多四行。这接口 3.4 就有,一直没换只因为没报错。

第三个:AttributeError: module 'ssl' has no attribute 'wrap_socket'。3.7 起 deprecated,五年里每次调用刷一行 warning,没人管,因为还能跑。3.12 删了。换成 SSLContext 配 wrap_socket(server_hostname=...),顺手把 check_hostname 和 CERT_REQUIRED 显式打开——老接口默认不校验 hostname,正是它被删的原因之一。

没报错的那个

datetime.utcnow() 在 3.12 仍只发 DeprecationWarning。仓库里搜出 47 处,这次没动,记了个 issue。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。