
Python 3.15.0rc2 已于 9 月 1 日发布。这是 3.15 最后一个计划中的候选版:与 rc1 相比,它汇集了约 144 项错误修复、构建改进和文档更新,来自 76 位贡献者。更值得扩展作者注意的是官方给出的承诺:从这一节点起,Python 3.15 系列不再发生 ABI 变化。
这句话看似只与写 C 代码的人有关,实际会沿着依赖链影响科学计算、数据库驱动、加密、图像处理等大量 Python 项目。只要依赖中含有原生扩展,能否及时拿到可安装的 wheel,就决定了新版本升级是一次普通更新,还是一场现场编译排障。
ABI 冻结,冻结的到底是什么
ABI 是“应用二进制接口”。Python 代码调用原生扩展时,扩展并不是只认识函数名;它还依赖可链接的符号、函数调用约定、数据结构布局以及解释器的构建方式。API 兼容意味着源码通常还能重新编译,ABI 兼容则更进一步:已经编译好的二进制文件可以直接装载。
RC2 的冻结让维护者可以在正式版之前构建面向 3.15 的二进制 wheel。官方明确表示,基于 3.15 候选版构建的 wheel 将适用于后续 3.15 版本。正式版计划于 10 月 1 日发布,这段候选期因此不只是“看看新功能”,而是生态集中补齐构建、安装和回归测试的窗口。
但承诺有边界。它主要保证同一 3.15 系列、兼容平台与相同构建模式下的二进制接口稳定;它不表示一个普通的 cp315 wheel 可以直接用于 3.14 或未来的 3.16,也不把 Windows、Linux、macOS、不同 CPU 架构以及启用或不启用自由线程的构建合并成一种产物。
它同样不承诺运行行为永远不变。扩展即使顺利装载,也可能因为解释器语义、线程调度或第三方依赖变化而暴露问题。ABI 解决的是链接错误、结构布局错配等二进制风险,不会替代跨版本测试。
冻结的是 3.15 系列的连接方式,不是所有环境之间的差异。
别把三种兼容承诺混在一起
第一种是版本专用 ABI。它允许扩展使用完整 C API,能接触更多实现细节,也可能获得更直接的性能,但通常要为每个 Python 小版本重新构建。RC2 的直接价值,就是让这类项目现在可以稳定产出 3.15 wheel。
第二种是传统 Stable ABI,也就是 abi3。扩展通过定义 Py_LIMITED_API,只使用 Limited API 的子集,以换取跨多个 Python 小版本复用同一二进制文件。代价是不能依赖部分内部结构和快速宏;例如可用稳定的函数接口,而不是直接触碰对象内部的宏版本。它面向带 GIL 的常规 CPython 构建。
第三种是 3.15 新增的 abi3t。它为自由线程 CPython 提供 Stable ABI,限制比 abi3 更严格,并引入 Py_TARGET_ABI3T 等机制。官方文档还允许扩展同时面向 abi3 与 abi3t。不过,“能够装载”不等于“并发安全”:共享状态、引用管理和第三方库调用仍要接受无 GIL 场景的真实压力测试。
三条路径交换的是不同程度的接口自由、性能空间与发布成本。
扩展维护者现在应做四件事
先把 RC2 放进持续集成。至少覆盖导入冒烟测试、完整测试套件和关键性能路径;若项目声称支持自由线程,再增加对应解释器构建。ABI 稳定只能防止接口继续漂移,不能替你发现语义变化、竞态条件或依赖链中的旧假设。
再审计 C API 使用面。检查以下划线开头的私有名称、PyUnstable 接口、结构体字段直访和依赖内部布局的宏。私有 API 甚至可能在补丁版本中变化;Unstable API 虽不会在补丁版本内变化,却本来就要求项目跟随每个小版本适配。
然后选择发布策略。追求完整 API 或极致性能的项目,可以先发布平台齐全的 cp315 wheel;更重视减少构建矩阵的项目,应评估 Limited API。构建工具通常能同时处理宏、文件名和 wheel 元数据,优先使用工具提供的正式配置,不要只手写一个宏就假定标签一定正确。
最后从干净环境验证分发物。在支持的操作系统和架构上实际执行安装、导入、卸载与回装,并检查 wheel 标签是否与解释器匹配。Rust、Cython、pybind11 等上层绑定也不能跳过这一步:生成代码和构建后端是否理解 3.15,同样会决定最终产物是否可靠。
普通项目:现在测试,不必抢跑生产
RC2 已经非常接近正式版,但官方仍不建议把候选版直接用于生产。应用团队更合适的动作,是在隔离环境安装 3.15,盘点哪些依赖带有原生扩展,记录缺失 wheel、构建失败、崩溃和性能回退,并把可复现问题反馈给上游。
ABI 冻结不是“升级风险归零”,而是把生态从等待接口稳定,推进到可以认真构建、测试和发布的阶段。
如果你维护原生扩展,最有价值的问题不是“3.15 能不能编译”,而是“我承诺支持的每种运行模式,是否都已有可安装、可导入、可回归验证的产物”。RC2 给出的,就是把这个答案补齐的最后窗口。
以上就是“Python 3.15.0 RC2,ABI 冻结意味着什么?”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料

- 本文固定链接: http://www.phpxs.com/post/14505/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料