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 上发现的任何安全漏洞都不会再有官方补丁。对个人小项目来说,这只是个"该升级了"的提醒;但对跑在生产环境的服务,它可能变成合规问题——很多公司的安全基线要求运行环境必须在厂商支持期内。
最容易中招的场景有三个:
- 老项目一直没动过:几年前搭的服务,
python:3.10的 Docker 镜像一跑就是几年,从没人想起升级。 - 系统自带的 Python:某些 Linux 发行版默认就是 3.10,你以为是系统在管,其实发行版的补丁节奏和上游 EOL 是两回事。
- 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 得不错,是时候跟它告别了。