发布就在本周:今年别急着背那句"等三个月"
截至 10 月 7 日,官方开发指南仍把 3.15 标为 prerelease,但按发布经理的确认,正式版定在 10 月 9 日——原定 rc2 收官的 3.15.0 临时补发 rc3,理由是正式版前抓到了几个 lazy import 相关的 release blocker,宁可多给社区几天验证,也不把问题带进正式版。 rc3 相比 rc2 包含约 156 项修复、来自 82 位贡献者,是目前最后一个计划中的候选版本。Python 官方开发者论坛知乎专栏
每年新 Python 发布,评论区总有人背那句老话:"等新版本,等三到六个月,生态兼容了再上。"今年这条规则,一半已经不成立了——不是直觉问题,是数据问题。下面这三笔账,发布日前一次算清。
一、wheel 清单:科学计算栈已经就位,深度学习栈还没有
这一轮 ABI 在 RC 阶段就冻结,官方还特别鼓励维护者提前发 wheel:按 RC 构建的 binary wheel 可以继续沿用到后续版本。 今天(10 月 7 日)实测 PyPI 各包最新发布页,结果是这样的:知乎专栏
包 | 当前最新版 | cp315 wheel |
|---|---|---|
NumPy | 2.5.3 | ✅ 已发布 |
pandas | 3.0.6 | ✅ 已发布 |
Pillow | 12.3.0 | ✅ 已发布 |
scikit-learn | 1.9.1 | ✅ 已发布 |
PyTorch | 最新发行 | ❌ 只到 cp314 |
科学计算主流四件套的 wheel 已经直接挂出支持标记,最典型的就是 numpy 的发行文件名里已经写着 cp315。 但 torch 的 PyPI 发行清单里目前最高只到 cp314——同样一句话结论,两拨人完全不该照抄。所以"等三个月"对数据栈基本作废,对 PyTorch 训练环境仍然有效:你的观察信号就是 torch 页面什么时候挂出 cp315 文件名。<#&!53#&!>PyPI 官方仓库
二、EOL 时钟:你图稳钉死的那一版,自带到期日
官方开发者指南写得很直白:一个版本发布五年后支持终止,这正是每个钉死的版本号背后的那根线。 按这张状态表,3.10 已于 2026 年 10 月 1 日——就在上周——退出维护;完整时间表:Python 官方开发者指南
版本 | 当前阶段 | 停止维护 |
|---|---|---|
3.10 | 已停更(2026-10-01) | 已结束 |
3.11 | 仅安全修复 | 2027-10 |
3.12 | 仅安全修复 | 2028-10 |
3.13 | 仅安全修复 | 2029-10 |
3.14 | bugfix 期 | 2030-10 |
3.15 | 本周发布 | 2031-10 |
很多项目把"稳"理解成钉死不动,但钉死的那一版每年都在向终点线走一格,"不升"从来不是零成本。至于多数团队现在实际停在哪:看这张社区整理的版本占比图就明白,3.12、3.11 才是大盘,"全员最新版"本来就不存在。

所以升级节奏的正确姿势不是"等生态",也不是"追首发",而是把 3.15 拉进 CI 测起来、生产基线晚一步跟上。
三、真正会"静默改行为"的,不是任何一个新特性
3.15 影响面最大的变化是默认编码策略:从这一版起,Python 在没有显式指定 encoding 时,文本 I/O 默认走 UTF-8,不再看系统 locale 眼色。 对处理 GBK/GB18030 历史文件、银行接口、ETL 的项目,这意味着升级当天行为就可能变:以前碰巧按本机编码读的文件,以后按 UTF-8 读。别只 grep open(),把测试环境开着 EncodingWarning 跑全量用例,该补 encoding= 的一次补干净——逃生开关(回退旧编码模式)是紧急回退手段,不是长期迁移方案。Python 官方文档

同类容易漏的还有参数签名:sqlite3.connect() 里除了 database 之外的参数都已经变成 keyword-only,老的位置参数写法要特别测一遍。 再就是 sre_* 这批正则内部 API 整体移除——它打到的是老项目和代码生成工具,不是你的业务代码,但升级回归时最容易撞上。知乎专栏
新特性这次确实给得大方:PEP 814 的 frozendict、PEP 810 的显式 lazy import、内置 sentinel(PEP 661)、自带 Tachyon 采样 profiler(PEP 799)、推导式里解包(PEP 798)、默认开帧指针便于系统级观测(PEP 831)。但这些全是 opt-in:不写新语法就不影响存量代码。唯一要留神的反而是 lazy import 的副作用——它把 import 推迟到首次访问,如果你的插件注册靠 import 时执行,延迟加载后那段注册可能根本不跑,这是 PEP 810 自己都点名过的最大兼容性风险。另外注意 frozendict 不是 dict 的子类,isinstance(x, dict) 会返回 False,别机械替换类型注解。
四、分人群动作清单
生产后端(基线 3.12/3.13):镜像先不动;CI 加 3.15 跑双版本全量测试;优先排查 encoding 与 sqlite3 位置参数;等 3.15.1 落地后再谈上生产。
数据/ML(numpy、pandas 栈):现在就能建 3.15 环境验证,wheel 已就位;训练机用 PyTorch 的,照旧等官方发行。
新手/学生:发布日官网给几装几,直接 3.15;默认 UTF-8 之后,"中文乱码"这个入门劝退点自己就消失了。装完在 IDE 里选解释器这一步,也不用再迁就旧教程里的版本号。

库作者:ABI 已冻结,cp315 的 wheel 现在就能发,把 3.15 加进发布矩阵——官方就是这么鼓励的。
五、性能党:为数字升级,会读错这一版的主线
Windows x64 官方二进制换用了 tail-call 解释器,社区报道说这一项在 Windows 上有最高约 15% 的运行提速。 JIT 这边仍停在实验阶段,社区转述的早期测量是 macOS AArch64 上比解释器快 11–12%、x86_64 Linux 上快 5–6%,且强调这些数字距官方对正式版的承诺还有距离。 为这些数字升级,其实读错了这一版的主线:官方的发布说明里只写了构建方式变更本身,3.15 真正的主题是"默认行为变了"——编码、签名、观测能力,而不是多了个加速器。微博微博
升级窗口期真正值钱的三件事:wheel 清单告诉你"什么时候能升",EOL 时钟告诉你"不升的代价",编码与签名自查表告诉你"升错了会踩哪"。这周四 3.15.0 落地,旧套餐、旧镜像、旧教程版本,都值得借这个机会重算一遍。
你现在生产环境钉死的是哪个 Python 版本、到期日是哪年?评论区报一下。