CPython 3.15.0a1 变更详解:从解释器核心、标准库到安全修复的完整演进
CPython 3.15.0a1 变更详解从解释器核心、标准库到安全修复的完整演进【免费下载链接】cpythonThe Python programming language项目地址: https://gitcode.com/GitHub_Trending/cp/cpython本文以 CPython 仓库中的 Misc/NEWS.d/3.15.0a1.rst 为主线系统梳理 Python 3.15 首个 alpha 版本在解释器核心字节码/JIT、自由线程、子解释器、标准库、C API、安全修复、构建与平台支持等方面的全部关键变更。读完本文你将准确掌握 3.15 的新增 API、行为变更、弃用与移除项并能结合仓库源码理解其实现原理与影响范围。一、文档定位Misc/NEWS.d 与版本发布节奏Misc/NEWS.d是 CPython 存放逐条变更新闻的目录每一条记录以 RST 指令.. date:、.. gh-issue:、.. section:等标注提交日期、GitHub issue 编号与所属分区。3.15.0a1.rst汇总了 Python 3.15.0 首个 alpha 版本发布日期 2025-10-14的全部变更按macOS、Windows、Tools/Demos、Tests、Security、Library、IDLE、Documentation、Core and Builtins、C API、Build等分区组织。值得注意的是该文件中的变更时间跨度从 2023 年延续到 2025 年这是因为 alpha 阶段会持续吸收在之前版本分支中未合入的长期改进。阅读此类文件时应以「3.15.0a1 相对上一版本新增了哪些能力」为视角而非拘泥于条目的提交时间。二、核心与内建Core and Builtins3.15 最大的技术看点本分区是 3.15.0a1 变更最密集的区域覆盖字节码优化、实验性 JIT 编译器、自由线程free-threading构建、子解释器、t-string 与 REPL 等方向。2.1 字节码与 JIT 编译器的持续优化Python 3.15 延续了 3.14 引入的实验性 JIT基于 LLVM路线本版本在其上做了大量打磨BINARY_OP整型特化收窄为 compact intBINARY_OP现在仅在操作数为紧凑整数compact ints时特化为BINARY_OP_ADD_INT、BINARY_OP_SUBTRACT_INT或BINARY_OP_MULTIPLY_INT以精简快速路径为代价减少超大整数场景下的特化数量gh-135379、gh-135474。JIT 优化器能力增强新增了引用计数消除 passgh-134584、字符串/列表/元组切片返回同类型推导gh-131798、常量比较_COMPARE_OP_INT/_FLOAT/_STR优化、_CALL_LEN已知长度优化、_UNARY_NEGATIVE/_UNARY_INVERT优化、CALL_ISINSTANCE拆分与常量求值、_CHECK_METHOD_VERSION内联化为_CHECK_FUNCTION_VERSION_INLINE等一批优化 passgh-131798 系列。JIT 稳定性修复修复了 JIT 处理大量局部变量时的段错误gh-137728、JIT trace buffer 溢出gh-137838、模块属性访问崩溃gh-135608、字符串与元组 round-trip 的 buggh-138431等。构建相关JIT 的 LLVM 版本可通过LLVM_VERSION环境变量覆盖仅一个官方支持版本风险自负详见 Tools/jit/README.md新增CFLAGS_JIT配置项用于单独配置 JIT 编译标志gh-134273为恢复与 macOS 10.15 部署目标的兼容性移除了部分较新的 macOS API 用法gh-134291。2.2 自由线程free-threading构建转正自由线程构建在 3.15 中摘掉了「实验性」标签gh-119132。相应地本版本为自由线程构建修复了大量并发问题并补充线程安全数据竞争修复修复了 daemon 线程在主线程关闭解释器时启用/禁用 profiling 或 tracing 可能导致的死锁gh-137433、QSBR 代码中修改对象__dict__时的崩溃gh-134679、weakref在析构函数中的竞争gh-135607、itertools.chain/combinations/product/cycle的并发迭代安全gh-123471 系列、io.BytesIO线程安全gh-132551、mmap/cProfile/syslog/pwd/grp/heapq/json模块的线程安全gh-116738 系列等。性能优化frozenset通过移除锁提升性能gh-132657copy.copy/copy.deepcopy在自由线程构建中的扩展性改进gh-132657大型 dict/list 被多线程访问与扩容时的内存使用限制gh-133136非阻塞互斥锁尝试在锁忙时立即返回而非短暂自旋gh-135871。ABI 兼容性加载为自由线程构建的扩展模块时若扩展是按非自由线程编译的会显示并抛出异常gh-137956。与此相关pyconfig.h不再按编译器设置生成不同版本该改动因频繁破坏扩展构建而被回退编译自由线程运行时必须显式定义Py_GIL_DISABLED预处理变量可通过sysconfig.get_config_var查询gh-133779。2.3 子解释器与concurrent.interpreters模块3.15 落地了 PEP 734提供create()、get_current()等工厂函数与Interpreter类Lib/concurrent/interpreters/_queues.py提供跨解释器队列。配套的测试位于 Lib/test/test_interpreters/含test_lifecycle.py、test_channels.py、test_api.py、test_queues.py、test_stress.py。本版本还补齐了大量配套能力_interpreters模块改用 Argument Clinic 解析参数gh-137630队列的put/get新增block参数以兼容queue.Queue接口gh-138253修复子解释器相关对象在 pickle 协议 0/1 下的序列化失败gh-133286、向运行于独立线程的子解释器发送KeyboardInterrupt时的断言失败gh-126016、REPL 中使用concurrent.interpreters时 finalization 阶段的 unraisable 异常gh-135729、进程内存耗尽时调用create的崩溃gh-112729等。2.4 t-stringPEP 750与 f-string 的持续完善t-string模板字符串能力在 3.15 继续演进annotationlib支持 t-stringgh-133551并修复了异常 t-string 注解的处理gh-138558Interpolation.expression现在默认为空字符串gh-132661反映 PEP 750 的变更禁止string.templatelib.Template与str拼接禁止 t-string 字面量与字符串/f-string 字面量的隐式拼接gh-132661修复了 t-string 迭代器耗尽后调用next的崩溃gh-134119、f-string 调试表达式剥离包含转义引号与#的字符串内容的问题gh-135148、tokenizer 中 lambda 冒号误启动 f-string 格式说明符的问题gh-139516等。2.5 其他核心行为变更小整数缓存从 256 扩展到 1024缓存的正小整数数量由 256 增至 1024gh-133059对高频小整数运算有正面影响UTF-8 模式默认开启PEP 686实现PEP 686默认启用 Python UTF-8 Modegh-133711非 UTF-8 源文件支持若指定了非 UTF-8 编码则支持非 UTF-8 的 shebang 与注释默认UTF-8编码下检测注释解码错误并在 traceback 中显示出错行与位置gh-63161-b/-bb弃用弃用命令行选项-b与-bb计划在 Python 3.17 中变为 no-opgh-136355对应 C API 的PyConfig.bytes_warning字段同步弃用sys.abi_info新增新增sys.abi_info对象便于访问 ABI 信息。实现位于 Python/sysmodule.c 的make_abi_info()包含pointer_bitssizeof(void *) * 8、free_threaded是否定义了Py_GIL_DISABLED、debug是否Py_DEBUG、byteorder等字段sys.remote_exec审计事件调用sys.remote_exec时发出审计事件并将remote_debugger_script迁移为cpython.remote_debugger_scriptgh-135543性能优化int 哈希计算提速gh-136599、PyLongObject转换函数PyLong_AsLongAndOverflow等对大整数提速最高 30%gh-82088、随机乱序列表排序更快新的最小 run 长度选取方案gh-135551、类创建时间提升最高 12%预计算 type slotsgh-132042、dict.fromkeys不再无限循环gh-132762等。三、标准库Library新增、优化与修复全景Library 分区条目数量庞大这里按主题归类呈现最具代表性的变更。3.1 安全与健壮性修复HTMLParser 全面对齐 HTML5 规范gh-135661 系列/ script不再结束 script 段\v与非 ASCII 空白不再视为空白仅\t\n\r\f与空格NUL 字符不再结束标签名结束标签名后的属性与斜杠被忽略属性与闭合之间的多个斜杠与空白被忽略属性名与值之间的多个不再被折叠a foobar生成值barCDATA 段按 HTML5 解析]]与]] 不再结束 CDATA新增私有方法_set_support_cdata()控制解析方式注释解析按 HTML5 修正--!结束注释、-- 不再结束、支持--/---修复了特制输入导致的处理复杂度为二次方的问题gh-135462修复 textarea/title 的可转义原始文本模式支持gh-118350。tarfile 提取过滤器绕过修复gh-135034修复了filterdata与filtertar可被构造的符号链接与硬链接绕过的多个问题涉及 CVE-2024-12718、CVE-2025-4138、CVE-2025-4330、CVE-2025-4517。其他安全修复marshal 反序列化slice对象时的崩溃gh-136053zip64中央目录记录一致性校验与「zip64 extensible data」支持gh-139700Expat 父解析器在子解析器仍引用时被提前 GC 的问题gh-139400sqlite3.Cursor.fetchmany对最大行数的正确处理与arraysize负值拒绝gh-139283unicode-escape解码器非 strict 错误处理器下的 use-after-freegh-133767长 IPv6 地址的内存消耗与 DoS 防护gh-128840。3.2 新功能与 API 扩展collections.Counter对称差支持对称差分gh-138682os.NODEV常量新增os.NODEVgh-138712os.RWF_DONTCACHE为 Linux 6.14 新增gh-139090math.fmax/math.fmin/math.signbit新增取较大/较小浮点值函数与 C99signbit暴露gh-135853 系列math.isnormal/math.issubnormal新增gh-132908zlib.adler32_combine/crc32_combine支持校验和组合gh-134635winreg.DeleteTreeWindows 注册表新增gh-138314threading.get_native_id支持 Illumos/Solarisgh-137884ssl增强SSLContext可设置 TLS 1.3 密码套件set_ciphersuitesgh-137197、客户端/服务端 TLS 签名算法gh-138252、密钥协商组gh-136306新增ssl.HAS_PSK_TLS13指示是否支持 TLSv1.3 外部 PSKRFC 9258gh-133623datetimestrptime系列支持%:z指令gh-121237datetime.now改为 half-even 舍入以与fromtimestamp一致gh-88994fromisoformat校验时区字段范围gh-126883resource模块新增RLIMIT_NTHR、RLIMIT_UMTXP、RLIMIT_PIPEBUF、RLIMIT_THREADS、RLIM_SAVED_CUR、RLIM_SAVED_MAX常量gh-137512RLIM_INFINITY在所有平台上恒为正整数gh-137044getrlimit/setrlimit对超大值的处理改为正数表示gh-137044sqlite3CLI新增基础颜色、关键字补全与sqlite3.SQLITE_KEYWORDS常量gh-133390、gh-133447ConnectionAPI 清理除database外的所有connect参数改为 keyword-onlygh-133595logging.basicConfig新增formatter参数gh-133577difflib.unified_diff新增color选项输出类似git diffgh-133722argparse默认启用彩色帮助gh-130645http.client新增max_response_headers关键字参数限制响应头数量以防 DoSgh-131724random.getrandbits/randbytes可生成超过 2³¹ 位与 256 MiB 的数据gh-133489functools.Placeholder不能作为关键字参数传给functools.partialgh-125028annotationlibForwardRef.evaluate改进嵌套前向引用求值gh-136316、type_params参数处理gh-137226、一致抛NameErrorgh-135646、get_annotations按需获取 globals/localsgh-119180typingTypedDict支持closed/extra_itemsPEP 728gh-137840修复get_type_hints对字符串注解泛型TypedDictgh-137226、__future__注解下继承 TypedDict 的__annotations__错误gh-133701等。3.3 移除项与行为收紧ByteString移除被推迟collections.abc.ByteString与typing.ByteString在 3.14 alpha/beta/RC 中曾被移除本版本将其加回移除推迟至 Python 3.17gh-118803。当前仅 import/访问也会触发DeprecationWarning此前仅子类化或用于isinstance/issubclass才告警。sre_compile/sre_constants/sre_parse模块移除gh-105456。移除的函数/类/方法glob.glob0/glob.glob1gh-137466、platform.java_vergh-133604、pathlib.PurePath.is_reserved用os.path.isreserved替代gh-133875、wave的getmark/setmark/getmarkersgh-133873、ctypes.SetPointerTypegh-133866、zipimport.zipimporter.load_module用exec_modulegh-133656、http.server.CGIHTTPRequestHandler与--cgi标志gh-133810、zipfile.ZipFile.data_offset3.14.0a7 曾加入gh-136170。hashlib关键字参数弃用hashlib.new及各哈希构造函数支持string关键字参数的做法弃用计划 3.19 移除建议改为位置参数gh-134978。3.4 性能优化亮点ast.literal_eval小输入提速 10-20%gh-124503json编码提速仅含无需转义字符的字符串编码最高提速 2.2 倍gh-135336datetime.date.today快速路径 5 倍提速gh-88473os.stat常规时间戳下提速gh-138535os.environ.clear()调用clearenv(3)gh-139482pprint对 list/tuple 提速gh-90117functools.partial关键字参数调用提速gh-119109asyncio Future 状态传递提速最高 4.4 倍gh-134173gzip/tarfile默认compressionlevel从 9 调为 6与多数压缩工具默认值一致速度与压缩率更均衡gh-91349。3.5 值得注意的行为变化unicodedata升级到 Unicode 17.0.0gh-138706REPLPyREPL改进tab 补全加入内建模块gh-134235、type在 type 语句中高亮为软关键字gh-138239、pip install输入提示使用系统命令提示符gh-72327、import 自动补全只建议明确指定的私有模块gh-134215、CtrlC 不再破坏补全菜单gh-134869、Emscripten 下可运行gh-124621、不再依赖cursesgh-135621、-X showrefcount交互修复gh-134097等http.serverHTTP/0.9 请求默认处理修复gh-70765、目录列表仅显示解码后的路径组件gh-133889、%2f/%2F结尾路径处理gh-134098zipimport支持 zstd 压缩的 zip 条目gh-61206mmap.mmapWindows 新增trackfd参数gh-78502size()在 Unix/Windows 匿名映射上行为统一gh-43429tarfile支持 path-like 对象打开归档gh-81325、校验 member 偏移非负gh-130577、Windows 提取时符号链接目标中的斜杠替换为反斜杠gh-57911venv不再创建 lib64-lib 符号链接gh-133951zoneinfo.reset_tzpath接受os.PathLike并转为字符串相对路径抛ValueErrorgh-138432locale.setlocale支持修饰符语言代码gh-137729。四、安全分区防御性修复汇总Security 分区的重点在html.parser、tarfile、expat、sqlite3、marshal、ipaddress、zipfile等模块Expat 防护可调为 xmlparser 对象新增SetBillionLaughsAttackProtectionActivationThreshold/SetBillionLaughsAttackProtectionMaximumAmplificationgh-90949与SetAllocTrackerActivationThreshold/SetAllocTrackerMaximumAmplificationgh-90949可分别调节对「billion laughs」攻击与动态内存异常消耗的防护阈值同时将捆绑 libexpat 升级至 2.7.2/2.7.3gh-138998、gh-139312。zip64 一致性检查gh-139700校验 zip64 中央目录结束记录的一致性支持无前置字节的 zip64 extensible data 记录。sqlite3 fetchmany 修复gh-139283正确处理最大可获取行数并拒绝负的arraysize。marshal slice 反序列化崩溃修复gh-136053。ipaddress 长 IPv6 地址短路处理gh-128840防止过度内存消耗与轻微 DoS。五、C API新增、弃用与移除5.1 新增 APIPyBytesWriterPEP 782实现 PEP 782 的PyBytesWriterAPI新增PyBytesWriter_Create、PyBytesWriter_Discard、PyBytesWriter_FinishWithPointer、PyBytesWriter_FinishWithSize、PyBytesWriter_Finish、PyBytesWriter_Format、PyBytesWriter_GetData、PyBytesWriter_GetSize、PyBytesWriter_GrowAndUpdatePointer、PyBytesWriter_Grow、PyBytesWriter_Resize、PyBytesWriter_WriteBytes等 12 个函数gh-129813。PyTuple_FromArray从数组创建元组gh-111489。ABI 兼容性检查 API新增Py_mod_abi、PyABIInfo_Check、PyABIInfo_VARgh-137210。PyMutex_IsLocked公开化gh-134009接受PyMutex指针的 critical section API 新变体公开gh-133296。PyUnstable_Unicode_GET_CACHED_HASH获取字符串缓存哈希gh-134891。PyUnicodeWriter_WriteASCII快速写 ASCII输入含非 ASCII 时行为未定义gh-133968。PySys_GetAttr/PySys_GetAttrString/PySys_GetOptionalAttr/PySys_GetOptionalAttrStringgh-108512。函数观察者新事件PyFunction_PYFUNC_EVENT_MODIFY_QUALNAMEgh-139924。PyRefTracer_SetTracer语义补充注册新 tracer 替换旧 tracer 时会以对象为 NULL、事件为PyRefTracer_TRACKER_REMOVED调用一次旧 trace 函数gh-138794。5.2 弃用与移除弃用PyConfig.bytes_warning字段计划 3.17 移除gh-136355移除PySys_ResetWarnOptionsgh-138886。移除Py_Get*初始化 getter 系列gh-133644移除PyWeakref_GetObject/PyWeakref_GET_OBJECT改用PyWeakref_GetRefgh-133644移除PyImport_ImportModuleNoBlockgh-133644移除PyUnicode_AsDecodedObject/AsDecodedUnicode/AsEncodedObject/AsEncodedUnicodegh-133610。_Py_c_sum/_Py_c_diff/_Py_c_neg/_Py_c_prod/_Py_c_quot/_Py_c_pow/_Py_c_abs及PyComplexObject.cval软弃用gh-128813。PyArg_ParseTuple无符号整型格式接受超出对应 C 类型范围的值弃用gh-132629PyArg_Parse的可空参数支持被回退gh-112068。PyThread_allocate_lock改用PyMutex实现Windows 上PyThread_acquire_lock_timed支持intr_flag可中断gh-134745。修复Py_RETURN_NONE/Py_RETURN_TRUE/Py_RETURN_FALSE在 limited C API 3.11 及更早版本中将单例误当 immortal 的问题gh-134989PyObject_DelAttr/PyObject_DelAttrString在 limited C API 3.12 及更早中实现为宏gh-134989PyGILState_Ensure在解释器 finalization 后调用不再崩溃gh-131185。PyObject_SetAttr/PyObject_SetAttrString在传入 NULL 值且已有异常时失败gh-135075。六、构建、平台与安装器变更6.1 Build 分区自由线程转正移除「experimental」标签gh-119132。OpenSSL 3.5 支持gh-132339Windows 安装器 OpenSSL 升级至 3.0.18gh-139573macOS 安装器升级至 3.5.4gh-132339。libmpdec 构建策略变更移除隐式回退到捆绑 libmpdec 的行为需显式--with-system-libmpdecno或--without-system-libmpdecgh-115119macOS 安装器使用 libmpdecimal 4.0.1gh-115119。./configure新警告同时设置--enable-optimizations与CFLAGS-O0时给出警告建议移除-O0gh-128042。Windows PGO使用/GENPROFILE//USEPROFILE替代已弃用的/LTCG:选项gh-134923。build-details.json修复按 PEP 739 使用正确的INCLUDEPY与c_api.headersgh-134632、gh-134455WASI/Emscripten 交叉编译也纳入build-details.json步骤gh-138489。6.2 macOS 分区安装器升级libmpdecimal 4.0.1、Tcl/Tk 9.0.2、OpenSSL 3.5.4、SQLite 3.50.4gh-115119、gh-124111、gh-132339、gh-137134。Shell 路径管理改进将Shell profile updaterpostinstall 脚本与Update Shell Profile.command分离实现更稳健的错误处理gh-137450。6.3 Windows 分区py install 3[.x]-dev现在同时选择正式版与预发布版gh-139810。修复未更新 Windows 机器上安装 C 运行库的错误gh-138896。winreg.DeleteTree新增gh-138314。os.path.realpath非严格模式忽略 Windows 错误 1005gh-76023。修复后台线程等待PyMutex时主线程关闭解释器导致的崩溃gh-135099。WMI 高负载下的 invalid handle 竞争gh-130727。Windows 相关 C 代码改用 Python 专属的Py_DEBUG宏而非!_DEBUGgh-131942。多个 WinAPI 分区partition相关的编译与运行修复gh-133562、gh-133568、gh-133572、gh-133580、gh-133626。6.4 交叉编译与工具链iOS新增构建 iOS XCframework 的脚本顶层iOS目录移入Apple目录下gh-138171XCframework 包含隐私清单以通过 App Store 审核gh-132006iOS 测试运行器简化gh-137873iOS 安装提供stripstubsgh-135968iOS testbed 将app_packages视为 site 目录gh-135966。WASITools/wasm/wasi将构建出的 Python 放入以 build triple 命名的目录gh-137484新增--logdir选项gh-137248自动检测 /opt 下直接解压的 WASI SDKgh-137243交叉编译时要求显式设置HOSTRUNNERgh-95952移除 C 栈深度限制特判gh-130397。Emscripten移除wasm_build.py脚本改用Tools/wasm/emscripten与Tools/wasm/wasigh-137025web_example修复与易用性改进gh-136251email模块加入 Emscripten 构建gh-138515ctypes.util.find_library在 Emscripten 下可用gh-99948。SBOMSBOM 生成工具现在与Modules/expat/refresh.sh交叉校验版本与校验和gh-139330。七、测试与工具链Tests / Tools-Demosregrtest--fast-ci --verbose不再忽略--verbosegh-139208支持从--pgo测试中排除用例gh-135494PGO 阶段失败测试显示详细输出gh-135489。test.support.subTests新增gh-135120unittest.TestCase.assertLogs可选接受 formattergh-134567。GitHub CI新增使用 AWS-LC 作为底层密码学/TLS 库测试ssl模块的 jobgh-135401。用例生成器不再接受栈项的注解非默认类型转换显式写入bytecodes.c与optimizer_bytecodes.cgh-135379。REPL import 自动补全仅在显式指定时建议私有模块gh-134215。IDEIDLE保存文件后 shell 标题栏去重版本号gh-96491t-string 前缀着色gh-139742。八、升级影响清单3.14 → 3.15 需要关注的行为变化综合以上各分区从 3.14 升级到 3.15.0a1 时最值得关注的行为变化包括类别变更影响编码UTF-8 模式默认开启PEP 686依赖 locale 编码的程序输出/文件名行为可能变化压缩gzip/tarfile默认压缩级别 9 → 6归档文件略大但压缩速度更快类型ByteString移除推迟到 3.17import 即告警检查代码中from collections.abc import ByteString等导入哈希hashlib的string关键字参数弃用改用位置参数传初始数据命令行-b/-bb弃用3.17 变 no-op尽早移除依赖模块sre_compile/sre_constants/sre_parse、glob.glob0/glob1、CGIHTTPRequestHandler等移除使用对应替代 API运行时自由线程构建不再标记 experimental可作为常规构建选项评估使用API新增concurrent.interpreters、sys.abi_info、PyBytesWriter等新能力可按需采用九、进一步阅读变更新闻原始文件Misc/NEWS.d/3.15.0a1.rst子解释器模块实现Lib/concurrent/interpreters/init.py、Lib/concurrent/interpreters/_queues.py测试见 Lib/test/test_interpreters/sys.abi_info实现Python/sysmodule.c跨解释器相关 C 模块Modules/_interpretersmodule.c、Modules/_interpchannelsmodule.cJIT 构建说明Tools/jit/README.md其他 NEWS 片段含后续版本变更Misc/NEWS.d/说明本文基于当前仓库3.15.0a1发布分支的 NEWS 文件整理所有结论均可回溯到对应条目及其关联的源码、测试与构建配置。文中涉及的性能数字均为变更条目中开发者声明的优化幅度实际效果因环境而异。【免费下载链接】cpythonThe Python programming language项目地址: https://gitcode.com/GitHub_Trending/cp/cpython创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考