12月3日,Python 3.13.1发布,作为 Python 3.13 系列的第一个维护版本,带来了近 400 个 bug 修复、构建改进和文档变更,在性能和稳定性方面实现了显著提升。本文将详细介绍升级到 Python 3.13.1 的建议,并阐述其主要新特性及改进之处。
安全增强与漏洞修复
Python 3.13.1 解决了多个安全问题,其中最值得关注的是:
• 升级 libexpat 至 2.6.4 (CVE-2024-50602): 修复了 libexpat 库中的一个安全漏洞,该漏洞可能被恶意利用。此举有效增强了 Python 的安全性,防止潜在的攻击。
• IPv6 地址处理的改进 (gh-122792): 修复了 IPv4 映射的 IPv6 地址在处理
is_multicast
、is_reserved
、is_link_local
、is_global
和is_unspecified
等属性时存在的不一致性问题,提升了网络操作的可靠性。• venv 激活脚本的改进 (gh-124651): 正确地引用了 venv 激活脚本中的模板字符串,防止潜在的脚本注入攻击。
• PyREPL 中 sys.path 的改进 (gh-125140): 在使用 PyREPL 时,从
sys.path
中移除当前目录,避免潜在的模块导入冲突和安全风险。
3.13 系列主要新特性
Python 3.13 相较于 3.12 版本带来了诸多令人兴奋的新特性:
交互式解释器升级
Python 3.13 的交互式解释器基于 PyPy 的改进版本,具备多行编辑和颜色支持,并提供了彩色异常回溯信息。
实验性免锁线程模式
Python 3.13 引入了一个实验性的免锁线程模式 (free-threaded build mode),该模式禁用全局解释器锁 (GIL),允许线程更并发地运行。
初步的实验性 JIT 编译器
Python 3.13 集成了一个初步的实验性即时编译器 (JIT),为未来的显著性能提升奠定了基础。虽然目前效果尚不显著,但它预示着 Python 在性能方面将有更大的潜力。
locals() 函数语义改进
locals()
内置函数 (及其 C 等效项) 现在具有明确的语义,允许对返回的映射进行修改,这使得调试器能够更一致地运行。 这对于开发者和调试工具的开发者都非常重要。
mimalloc 内存分配器
Python 3.13 默认情况下包含了 mimalloc 内存分配器 (可选,但如果平台支持则默认启用),并被免锁线程模式所需要。mimalloc 通常能提供更快的内存分配和释放速度,以及更低的内存碎片率,从而提高整体性能。
docstring 行首缩进去除
Python 3.13 去除了 docstring 的行首缩进,从而减少了内存使用量和 .pyc 文件的大小。此项改进在不影响程序功能的前提下,降低了内存占用,提升运行效率。
dbm 模块的改进
dbm
模块现在默认使用 dbm.sqlite3
后端创建新文件,提供了更强大的数据库操作能力。
平台支持改进
Python 3.13 提高了对 WASI (WebAssembly System Interface) 的支持等级 (Tier 2),并降低了对 Emscripten 的支持等级 (不再官方支持,但 Pyodide 继续支持)。同时,Python 3.13 也开始支持 iOS 和 Android 平台 (Tier 3)。
类型提示增强
Python 3.13 在类型提示方面也进行了增强,包括:
• 支持类型参数中的类型默认值。
• 新的类型缩小注解
typing.TypeIs
。•
TypeDict
中只读项的新注解。• 用于标记类型系统中弃用项的新注解。
移除和弃用
Python 3.13 按照 PEP 594 移除了许多已弃用的模块,例如 aifc
, audioop
, chunk
, cgi
, cgitb
, crypt
, imghdr
, mailcap
, msilib
, nis
, nntplib
, ossaudiodev
, pipes
, sndhdr
, spwd
, sunau
, telnetlib
, uu
, xdrlib
, lib2to3
等。此外,还移除了其他一些已弃用的类、函数和方法。
总结
Python 3.13.1 是一个重要的维护版本,它修复了大量的 bug,并带来了显著的性能和稳定性提升。建议开发者积极升级到 Python 3.13.1,以享受其带来的优势,并及时关注官方文档和相关更新信息。