Python 3.14 构建系统与平台支持#
本章介绍 Python 3.14 的构建选项变更、官方二进制新特性、平台支持扩展和签名机制变化。
1. 构建选项变更#
新的配置选项#
选项 |
说明 |
默认值 |
|---|---|---|
|
构建自由线程版本(无 GIL) |
关闭(标准构建) |
|
使用尾调用解释器 |
关闭 |
|
启用 Copy-and-Patch JIT |
macOS/Windows 官方二进制开启 |
|
禁用 PEP 768 远程调试接口 |
开启(远程调试可用) |
安全编译器选项默认启用#
Python 3.14 在编译器支持时默认启用以下安全选项:
-fstack-protector-strong:栈保护-D_FORTIFY_SOURCE=2:缓冲区溢出检测-Wl,-z,relro,-z,now:重定位表只读(RELRO)Control Flow Integrity(CFI)如果编译器支持
WITH_FREELISTS 移除#
Python 3.14 移除了 WITH_FREELISTS 编译选项和相关的自由列表(free-lists)优化。自由列表之前用于加速小对象(float、list、dict 等)的分配/释放。移除原因:
与 mimalloc(自由线程模式默认分配器)功能重复
简化内存管理代码
mimalloc 已提供类似或更好的性能
Autoconf 2.72 要求#
从源码构建 Python 3.14 需要 Autoconf 2.72 或更高版本(如果需要重新生成 configure 脚本)。
构建示例#
# 标准发布构建(类似官方二进制)
./configure --enable-optimizations --with-lto
# 自由线程 + JIT + 尾调用(性能最优的开发构建)
./configure --disable-gil --enable-experimental-jit --with-tail-call-interp --enable-optimizations
# 调试构建
./configure --with-pydebug --without-pymalloc
make -j$(nproc)
make test # 运行测试
sudo make install
2. 官方二进制新特性#
macOS/Windows 包含实验性 JIT#
Python 3.14 官方 macOS 和 Windows 安装包包含实验性 JIT 编译器,不需要从源码构建:
# macOS/Windows 上直接使用
PYTHON_JIT=1 python3.14 your_script.py
Linux 官方构建(python.org 下载)也包含 JIT 支持,但各 Linux 发行版的包可能不同。
Android 官方二进制#
Python 3.14 首次提供 Android 平台的官方二进制构建:
ARM64-v8a 架构
可用于 Android 应用内嵌 Python
支持通过 Chaquopy 或类似框架使用
Emscripten Tier 3 支持(PEP 776)#
PEP 776 将 Emscripten(WebAssembly/WASI)提升为 Tier 3 支持平台:
Tier |
含义 |
Emscripten 状态 |
|---|---|---|
Tier 1 |
官方完全支持,每个 PR 都测试 |
Linux/macOS/Windows |
Tier 2 |
官方支持,定期构建 |
更多 Unix 平台、某些架构 |
Tier 3 |
社区支持,构建可用但不保证测试通过 |
Emscripten (3.14 新增) |
# Web 浏览器中运行 Python(通过 Pyodide 等项目)
# Python 3.14 为 Emscripten 提供更好的官方支持
3. PEP 739:build-details.json#
PEP 739 引入了 build-details.json 文件,包含 Python 构建的完整配置信息:
# 查看构建信息
python3.14 -m sysconfig --build-details
# 或
import json, sysconfig
with open(sysconfig.get_config_var('BUILD_DETAILS')) as f:
details = json.load(f)
build-details.json 包含:
Python 版本和 ABI 信息
编译器标志和选项
构建配置(自由线程/JIT/尾调用等)
平台信息
启用/禁用的模块列表
用途#
构建系统检测 Python 配置(是否为自由线程版本、JIT 是否可用等)
C 扩展构建时的配置匹配
诊断环境问题
4. PEP 761:Sigstore 替代 PGP 签名#
变更#
从 Python 3.14 开始,CPython 发布版本不再使用 PGP 签名验证,改用 Sigstore:
方面 |
旧方式(PGP) |
新方式(Sigstore) |
|---|---|---|
签名格式 |
|
Sigstore bundle( |
密钥分发 |
需要信任公钥网络 |
基于证书透明性和 OIDC |
验证工具 |
gpg |
|
验证下载#
# 旧方式
gpg --verify Python-3.14.0.tgz.asc Python-3.14.0.tgz
# 新方式
pip install sigstore
sigstore verify identity Python-3.14.0.tgz \
--cert-identity pablogsal@python.org \
--cert-oidc-issuer https://accounts.google.com
5. 平台支持变化#
FreeBSD 平台名简化#
FreeBSD 构建的平台标识简化,不再包含版本号在 platform string 中。
Windows C99 实数/复数运算#
Windows 构建现在正确使用 C99 标准的实数和复数运算,不再使用 MSVC 特有的模拟实现。这改善了复数运算在 Windows 上的正确性和性能。
iOS/macOS stdout/stderr 重定向#
iOS 和 macOS 上 stdout/stderr 的重定向行为得到修复,在 GUI 应用中捕获 Python 输出更可靠。
6. 自由线程构建命名约定#
构建类型 |
Unix 可执行文件 |
Windows |
pkg-config |
|---|---|---|---|
标准构建 |
|
|
|
自由线程构建 |
|
|
|
调试构建 |
|
|
|
自由线程+调试 |
|
|
|
ABI 标签中,自由线程构建使用 t 后缀:
标准:
cpython-314-x86_64-linux-gnu自由线程:
cpython-314t-x86_64-linux-gnu
import sysconfig
print(sysconfig.get_config_var('EXT_SUFFIX'))
# 标准: '.cpython-314-x86_64-linux-gnu.so'
# 自由线程: '.cpython-314t-x86_64-linux-gnu.so'