产品#代码生成

Python 3.15 稳定版发布

lazy import、UTF-8 默认编码落地,JIT 提速 7-8%;free-threading 确立 abi3t 稳定 ABI。

一条球蟒穿行在草丛中

Python 官方 10 月 9 日发布 3.15.0 稳定版(支持期到 2031 年 10 月),发布节奏与年度窗口如期,这是 Python 治理成熟度最朴素的证明。这一版的主题是「把多年的实验转正」:PEP 810 显式惰性导入、PEP 686 UTF-8 默认编码、free-threading 确立稳定 ABI。发布物全面改用 Sigstore 签名(OpenPGP 签名自 3.14 起弃用)。

要点

  • PEP 810 惰性导入:新增 lazy import 关键字,模块延迟到首次使用才加载;可用 PYTHON_LAZY_IMPORTS 环境变量控制——CLI 工具的启动时间直接受益
  • PEP 686 UTF-8 默认:open() 默认 UTF-8,不再随系统 locale 变化;PYTHONUTF8=0 可退出
  • JIT:实验性 JIT 在 x86-64 Linux 提速 7-8%(AArch64 macOS 11-12%),新增 tracing 前端与基础寄存器分配,仍默认关闭
  • free-threading:PEP 803 确立 abi3t 稳定 ABI;macOS 官方安装包默认包含 free-threading 支持
  • 新内置:frozendict(PEP 814)与 sentinel(PEP 661);PEP 798 允许推导式内解包
  • 安全:tarfile 多个 CVE 修复;签名体系切换 Sigstore

三个转折点

3.15 实际上关闭了 Python 的三场长期争论。UTF-8 默认终结了持续十几年的「编码坑」——Windows 中文环境用户再也不用背 encoding='utf-8' 的口诀。free-threading 的 abi3t 意味着 C 扩展作者终于可以针对「无 GIL 构建」发布稳定二进制——GIL 的退场从路线图进入了工程期。惰性导入则承认了 Python 在 AI 时代的角色变化:当 import torch 要吃掉数秒与数 GB 内存,「按需加载」从风格问题变成了成本问题。

惰性导入的实战打法

lazy import 的价值在三类场景立竿见影:CLI 工具(启动延迟从秒级回到毫秒级)、Lambda 类函数计算(冷启动计费按毫秒算钱)、以及多智能体进程(每个进程都要 import 一遍全家桶)。迁移成本低是它最务实的一面——不加 lazy 的导入行为完全不变,团队可以只把重依赖标记为惰性,其余代码不动——这是它与过去各种「懒加载魔法」最大的区别:语言级关键字,无第三方依赖,不靠 import 钩子猜意图。PYTHON_LAZY_IMPORTS=1 则提供了「全局试水」的开关:先在测试环境全量开启观察报错,再决定逐个标注。

兼容性雷区清单

升级 3.15 的真实风险集中在两处:locale 依赖的旧代码(默认编码变了,靠系统编码的隐式行为会变)和 C 扩展的 free-threading 兼容性(abi3t 是新标准,旧扩展 wheel 需要重新构建)。数据科学栈要格外注意:pandas、numpy 这类重扩展的 abi3t 轮子到位前,free-threading 构建暂时只能跑纯 Python 负载——这个时间差就是 3.15 到 3.16 之间整个生态的追赶任务。官方在 What’s New 里给出的建议顺序是:先跑测试套件确认 UTF-8 默认无感,再评估 JIT 与 free-threading——两者都默认关闭,不升白不升。

编辑判断:运行时税

Python 是 AI 时代的胶水语言,也是启动最慢的主流语言之一——每个智能体进程、每个数据管道都要为 import 付出冷启动税。3.15 的三件套(lazy import、JIT、free-threading)都是冲着这笔税去的:单进程提速个位数百分比不惊人,但乘以智能体经济的调用次数就是真金白银。还有一个容易被忽略的点:惰性导入对「把 Python 当胶水」的 AI 工具链是免费午餐——不需要重编译扩展,不需要改运行时,注解几行就能吃到启动收益,这是 3.15 里迁移成本最低、回报最快的一项。Deno 并入 Cloudflare 让出了独立运行时的位置,Python 用转正实验换的是同一个东西:在智能体经济里保住基础设施席位。升级建议:先在 CI 里跑 UTF-8 默认的兼容矩阵,再逐步开惰性导入——两步分开走,出问题能立刻定位到哪一层。