Python 3.13.5补丁发布:关键修复与稳定性提升
引言
2025年6月11日,Python核心团队发布了Python 3.13.5,这是3.13系列的第五个维护更新。此版本并非引入花哨的新语言功能,而是解决了3.13.4中引入的一些紧迫回归问题和错误。版本号中的“.5”表明这是一个纠正性、加速发布的更新,而非功能驱动的里程碑。
3.13.5的发布背景
Python 3.13于2024年10月7日发布,相比3.12引入了多项重大改进,包括重新设计的交互式shell、实验性支持无全局解释器锁(GIL)运行以及初步的JIT基础架构。
然而,在发布3.13.4后,维护人员发现了几个严重的回归问题。因此,3.13.5被加速发布(而不是等待下一个常规维护版本),以便在这些问题影响更广泛用户群之前进行纠正。在发布前的讨论中,注意到Windows扩展模块构建在某些配置下会失败,这促使了紧急行动。
关键修复与纠正
虽然3.13.5解决了众多小错误,但以下三个纠正措施是加速更新的主要驱动力:
GH-135151 — Windows扩展构建失败
在Windows上的某些构建配置(非自由线程构建)下,编译扩展模块失败。这追溯到pyconfig.h头文件无意中启用了自由线程构建。补丁恢复了配置宏的正确对齐,确保扩展构建像以前一样成功。
GH-135171 — 生成器表达式TypeError延迟
在3.13.4中,当给定不可迭代对象时,生成器表达式停止早期引发TypeError。相反,错误被推迟到首次迭代时。3.13.5恢复了在创建时当提供的输入不可迭代时引发TypeError的早期行为。
GH-135326 — random.getrandbits()对“类int”类型损坏
在3.13.4之前,将“类int”对象(例如numpy.int64)传递给random.getrandbits()是有效的,只要该值可以像整数一样处理。在3.13.4中,此行为被破坏。3.13.5中的修复恢复了对getrandbits()调用中类int类型的支持。
3.13系列的更广泛改进和基础增强
由于3.13.5是维护版本,它没有引入全新功能。但它继承并巩固了使Python 3.13与3.12区别开来的许多增强功能:
改进的交互式REPL(shell)体验
Python现在附带一个功能更强大的交互式解释器(REPL),部分灵感来自PyPy。体验包括:
- 多行编辑(而非逐行)
- 默认颜色化提示、回溯和doctest输出(可通过环境变量配置)
- 方便的內建命令,如help、quit、exit,无需括号
- “粘贴模式”(可切换)以便于粘贴到REPL中
实验性自由线程模式(无GIL)
3.13中最雄心勃勃的举措之一是引入了一种可选模式,可以在没有全局解释器锁(GIL)的情况下运行CPython。在此模式下,线程可以更自由地并行执行。该模式目前是实验性的,默认未启用。
原型JIT编译器
3.13中捆绑了一个最小的即时(JIT)编译器。它默认禁用,被认为是实验性的——其当前的性能提升有限。目标是为未来版本中更积极的优化奠定基础。
更一致的locals()语义
在旧版本中,改变由locals()返回的字典是未定义或不一致的。Python 3.13赋予该映射明确定义的语义:更改返回的映射可以可靠地影响优化上下文中的局部变量,这有助于调试工具行为更可预测。
标准库改进
3.13标准库中的一些重要变化:
dbm.sqlite3:使用SQLite的新dbm后端现在在创建新数据库时成为dbm的默认后端。- 文档字符串内存优化:自动从文档字符串中去除前导缩进,以减少内存消耗和.pyc文件大小。
- 新的类型功能:
- 类型参数中支持默认值(例如
TypeVar[...] = Default) typing.TypeIs用于更直观的类型缩小行为- 其他用于
TypedDict中“只读”条目的注解和类型空间中弃用装饰器
- 类型参数中支持默认值(例如
- 其他模块:
argparse现在支持弃用命令行选项、位置参数和子命令。
平台与兼容性变化
- 最低macOS版本提升:Python 3.13现在需要macOS 10.13(High Sierra)或更新版本。对旧版macOS的支持已弃用。
- WASI支持:WebAssembly系统接口(WASI)现在拥有Tier 2支持。同时,Emscripten不再是官方支持的平台。
- 移动平台:iOS和Android过渡到Tier 3支持。
- 根据PEP 594的移除:作为弃用清理的一部分,许多“死电池”模块最终被移除——例如
cgi、imghdr、pipes、xdrlib、mailcap等。
安全补丁和解决的CVE
虽然3.13.5的主要目标是修复回归问题,但它也携带了重要的安全更新——特别是在文档和其他外围包中。
例如,Fedora python3-docs包更新到3.13.5解决了多个安全漏洞:CVE-2024-12718、CVE-2025-4138、CVE-2025-4330、CVE-2025-4435和CVE-2025-4517。
升级:指南、风险和最佳实践
考虑到修复和安全补丁,许多项目将受益于升级到3.13.5。但一如既往,需要谨慎。
建议的升级步骤
- 阅读完整的变更日志/差异
- 在3.13.5下运行测试套件
- 检查依赖项
- 使用虚拟环境或容器
- 部署后监控日志和警报
- 制定回退计划
潜在风险和注意事项
- 移除的模块或API
- 破坏的假设
- 扩展模块重新编译
- 自由线程模式注意事项
- 与旧系统的向后兼容性
3.13.5对Python未来路径的信号
尽管3.13.5是一个纠正性补丁,但它巩固了Python未来的更广泛趋势:
- 对回归问题的更快响应
- 解释器现代化的投资
- 精简的标准库
- 更严格的平台要求
- 类型系统增强
结论
Python 3.13.5作为一个及时、专注的维护版本发布。它修补了3.13.4中的关键回归错误,携带了基本的安全更新,并保留了在Python 3.13中引入的增强功能。开发人员应认真考虑升级,并采取标准预防措施:彻底测试、检查依赖项,并在部署后监控。
此版本还加强了Python的发展轨迹:朝着更精简的标准库、更智能的解释器设计、更好的工具和响应式维护方向发展。3.13.5有助于保持3.13系列的稳定和可靠——为未来的任何发展奠定了坚实基础。