Python 3.10 正式退役:五版本齐发安全更新,你的运行环境该升级了

Python安全更新
Python 3.10 正式退役:五版本齐发安全更新,你的运行环境该升级了

2026 年 10 月 1 日,Python 官方做了一件不常见的事:一次性发布了五个版本——3.10.22、3.11.17、3.12.15、3.13.16 和 3.14.8,全部是安全修复。而在这批更新里,3.10.22 有一个特殊身份:它是 Python 3.10 系列的最后一个版本。从此 3.10 正式退役(End of Life),以后再发现任何漏洞,官方都不会再打补丁了。

如果你平时写 Python 但不太关注版本生命周期,这篇文章就是帮你把这件事讲清楚:更新了什么、跟你有什么关系、该做什么。

这次五个版本都是什么来头

先看一张表,一目了然:

版本状态说明
3.10.22最终版,系列退役此后无任何更新,仅源码包
3.11.17仅安全修复支持到 2027 年 10 月,仅源码包
3.12.15仅安全修复支持到 2028 年 10 月,仅源码包
3.13.16最后一个完整维护版之后只修安全问题,有二进制安装包
3.14.8当前主力版本正常维护,有二进制安装包

几点补充:3.10 和 3.11 的二进制安装包早在 3.10.11 / 3.11.9 就停了,所以这次 3.10.22、3.11.17、3.12.15 都是 source-only,只能下载源码自己编译。3.13.16 和 3.14.8 则照常提供 Windows、macOS 的安装包。

安全修复内容包括 tarfile 解压路径绕过、zipfile 解压炸弹(decompression bomb)等问题——都是那种"平时感觉不到,一出事就是大事"的类型。如果你服务器上有解压用户上传压缩包的逻辑,这类漏洞值得你特别留意。

为什么 3.10 退役值得你专门看一眼

"退役"意味着:从今天起,3.10 上发现的任何安全漏洞都不会再有官方补丁。对个人小项目来说,这只是个"该升级了"的提醒;但对跑在生产环境的服务,它可能变成合规问题——很多公司的安全基线要求运行环境必须在厂商支持期内。

最容易中招的场景有三个:

  1. 老项目一直没动过:几年前搭的服务,python:3.10 的 Docker 镜像一跑就是几年,从没人想起升级。
  2. 系统自带的 Python:某些 Linux 发行版默认就是 3.10,你以为是系统在管,其实发行版的补丁节奏和上游 EOL 是两回事。
  3. CI 配置写死了版本:.github/workflows 里 python-version: "3.10",每次构建都在用一个不再有安全更新的解释器跑测试。

先检查,再决定升到哪

第一步永远是先看清现状。在服务器和本地各跑一遍:

python3 --version

再检查项目里锁死版本的地方:pyproject.toml 的 requires-python、.python-version 文件、Dockerfile 里的 FROM python:3.10-...、CI 配置里的版本号。很多时候"还在用 3.10"不是主动选择,而是某个配置文件里的一行字。

升级目标怎么选:

  • 求稳:3.12 或 3.13。3.12 支持到 2028 年 10 月,3.13 到 2029 年 10 月,第三方库的 wheel 包覆盖最全,踩坑最少。
  • 新项目:可以直接上 3.14,支持到 2030 年 10 月,但先确认你的依赖都有对应版本的 wheel。
  • 别选 3.11:它 2027 年 10 月就退役,现在迁过去等于一年后又要迁一次。

升级前做两件事:一是在测试环境跑全量测试,3.10 到 3.12/3.13 之间有一些 API 行为变化(比如 asyncio 的部分接口);二是确认 C 扩展依赖有新版本的预编译包,免得在生产机上现场编译。

小结

  • 10 月 1 日五连发:3.10.22 / 3.11.17 / 3.12.15 / 3.13.16 / 3.14.8,全是安全修复。
  • 3.10 正式退役,此后再无补丁;3.11、3.12 进入纯安全修复期;3.13 这是最后一个完整维护版。
  • 今晚就可以做的事:python3 --version 看一眼,顺手检查 Dockerfile 和 CI 里锁死的版本号。

版本升级永远是"早做早轻松,晚做变迁移项目"。3.10 这五年 serve 得不错,是时候跟它告别了。