
如果你和我一样,每年十月都会被 Python 的新版本发布刷屏,那今年有个值得记住的日子:2026 年 10 月 9 日(明天),Python 3.15.0 正式版发布。按惯例,新版本总被吹成"改变一切",但 3.15 是个实在版本——功能从 5 月就冻结了,原定 10 月 1 日发布,最后因为懒加载(lazy import)几个边界 bug 修到 10 月 2 日才出第三个候选版,推迟一周。这篇把你升级前真正需要知道的 6 件事讲清楚。
本文信息来自 Python Insider 官方公告 与 Real Python 十月新闻,写于正式版前一天。
先说结论:该不该升级?
- 个人脚本、CLI 工具:等明天正式版发布后即可尝试,lazy import 一个就能让启动变快。
- 维护有 C 扩展的包:现在就能发布 3.15 的 wheel——ABI 从 8 月就冻结了,候选版构建的轮子与正式版兼容。
- 生产服务器:稳一手,等 3.15.1。老规矩。
下面展开讲变化。
1. lazy import:import 终于可以"迟到"了(PEP 810)
这是 3.15 的头牌特性,也是压着发布日期等它的那个特性。新的软关键字 lazy:
lazy import json
print("启动成功") # 此时 json 还没加载
data = json.loads("{}") # 第一次用到它时才真正加载
原理很简单:加了 lazy 前缀的 import,在你第一次访问这个模块前都不会执行。启动慢、但重模块只是"偶尔用"的 CLI 工具、agent 工具服务这类场景收益最大——--help 秒回的那种爽快。
注意这是软关键字,如果你自己的代码里有个变量叫 lazy,不会被破坏(软关键字的设计就是为此)。
正式版前修的几个 blocker 挺有代表性:lazy import a.b as c 会被误读成"取属性 b"而不是导入子模块;触发一个子包也会连带把兄弟子模块一起加载。rc3 才修好。所以如果你在 rc2 上试过觉得不对,换 rc3/正式版再测一次。
2. 两个新的内置类型:frozendict 和 sentinel
3.15 新增了两个内置类型,不用再装第三方包:
frozendict:不可变的字典。以前冻结配置只能靠第三方包或"约定不许改",现在内置了。适合做函数默认配置、全局常量映射。sentinel:用于"表示缺失值"的哨兵对象。以前大家用None凑合,但None有时候是合法值:
_MISSING = sentinel("MISSING") # 以前只能自己写一个哑对象
def fetch(cache_key, default=_MISSING):
if default is _MISSING:
raise KeyError(cache_key) # 明确区分"没传"和"传了 None"
写库作者和框架代码会最先受益,业务代码暂时感受不深。
3. 默认 UTF-8:最可能让你踩坑的"唯一变化"
从 3.15 开始,UTF-8 全面默认:open() 不再看系统 locale 猜编码。这对新代码是好事,但如果你的代码隐含依赖了"本地遗留编码"(比如 Windows 上默认 GBK),升级后读文件行为会变。
自查办法(Real Python 的建议),对项目跑一次测试:
uv run --python 3.15 -X warn_default_encoding -W error::EncodingWarning pytest
凡是 open() 没写 encoding= 的地方都会被转成测试失败,修法也简单:显式传入你真正想要的编码,并给读遗留编码的文件加一条真实文件测试。下午就能扫完,不用等到明天再动手。
4. JIT 终于进入"能用的"阶段
解释器加速这次有两笔账:
- 升级的 JIT(实验性):加了 tracing 前端,官方基准 x86-64 Linux 上比标准解释器快 7–8%,AArch64 macOS 上比尾调用解释器快 11–12%。注意"实验性、需要构建支持并显式开启",默认不开。
- Windows 尾调用解释器:官方 64 位 Windows 包换了 VS 2026 构建的尾调用解释器,x86-64 上测出比 switch-case 快 15–20%。
别指望翻倍,但趋势是对的:CPython 的"快一点"工程在稳定推进。免费多线程这边,macOS 官方安装包开始默认附带 free-threaded 构建,ABI 稳定(abi3t)也让扩展作者能为无 GIL 构建发一套轮子。
5. 标准库多了个采样分析器
stdlib 新增采样 profiler,能挂到一个正在运行的进程上采样。以前想看线上进程的热点,要么停服务、要么折腾第三方工具;现在标准库直接给了。不过生产环境接调试工具之前,记得确认你的部署政策允许——功能有了,合规自己管。
6. 有一个"撤退":增量 GC 被回滚了
不是所有变化都是加法。3.14.0 引入的增量垃圾回收器在 3.14.5 被回滚(线上出现内存压力报告),3.15 沿用老的代际 GC。这是它第二次被撤回,顺带给所有人一个提醒:基准测试好看,不等于生产好用。
彩蛋:EVE Online 终于要告别 Python 2
同月的社区新闻里还有一条好玩的:EVE Online 宣布 240 万行 Python 2 代码开始迁移到 Python 3。Python 2 在 2020 年已经 EOL,六年后还有头部项目刚启程——给你的升级计划一点宽容心,也给拖延一点警示。
升级路线图(一句话版)
| 你是哪种用户 | 建议 |
|---|---|
| 个人脚本 / CLI | 明天正式版后升,顺手体验 lazy import |
| 有 C 扩展的包作者 | 现在就可以发 3.15 wheel,RC 构建的轮子兼容正式版 |
| 生产服务 | 等 3.15.1,先跑一遍 -X warn_default_encoding 的自查 |
如果你去年错过了 Python 3.14 的变化(free-threading 正式支持、模板字符串 t-string),那篇也值得回看——3.14 是 3.15 的地基。
相关链接:Python Insider 3.15.0rc3 公告 · What's New in Python 3.15 · Real Python 十月新闻
