Python 3.15 beta 2 发布:该动手验证了

2026-06-02 29 预计阅读时间:1 分钟
来源:blog.python.org AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:8 分钟

Python 3.15.0 beta 2 已经出炉,这是正式发布前的倒数第三个 beta 版本。beta 阶段意味着不再接受新特性(feature freeze 已过),后续版本只会修 bug 和做小调整。如果你有库或项目需要兼容 3.15,现在就是最佳验证窗口——等到 release candidate 再测,留给修问题的时间就很短了。

为什么 beta 2 值得关注

Python 的年度发布节奏已经稳定:每年一个新版本。3.15 的开发周期遵循同样的时间表——alpha 阶段合入新特性,beta 阶段冻结特性只修缺陷,然后进入 release candidate,最终正式发布。

"倒数第三个 beta"这个定位意味着:

  • 特性集已锁定:你看到的 API 和行为,基本就是最终版的样子。
  • 还有调整空间:如果某个改动让你的项目崩溃,现在报告还有时间被采纳。
  • CI 可以开始跑了:把 3.15 beta 加入持续集成矩阵,提前暴露问题。

3.15 中的关键变化

基于已合入的特性,以下几项值得重点留意:

自由线程模式(free-threaded build)继续成熟

3.13 引入了实验性的 free-threaded 构建(去掉 GIL),3.14 做了大量扩展模块适配工作,3.15 在这条路上继续推进。如果你的 C 扩展还没测试过 free-threaded 模式,现在该动手了。

标准库与语法层面的调整

每个版本都有一些标准库改动和废弃声明。3.15 继续清理历史遗留——部分在之前版本标记为 deprecated 的 API 可能正式移除。如果你的代码依赖这些,升级后会直接报错。

性能与内部优化

Python 团队持续在解释器性能上投入,3.15 包含一系列底层优化。对大多数开发者来说不需要改代码,但基准测试数字会好看一些。

实践:安装 beta 2 并跑兼容性测试

下面是一个可以直接复制使用的流程,从安装到跑测试:

# 用 pyenv 安装 Python 3.15.0b2(需要先更新 pyenv 的定义)
pyenv update
pyenv install 3.15.0b2

# 设置为某个项目的本地版本
cd ~/my-project
pyenv local 3.15.0b2

# 确认版本
python --version
# 应输出: Python 3.15.0b2

如果你不用 pyenv,也可以直接从 python.org 下载预编译包,或者用 conda:

conda create -n py315b2 python=3.15.0b2 -c conda-forge
conda activate py315b2

安装完成后,跑一遍你的测试套件:

# 安装项目依赖(可能需要处理兼容问题)
pip install -e ".[dev]"

# 跑完整测试
pytest --tb=short -q

# 如果有 C 扩展,尝试 free-threaded 构建
# 需要单独安装 free-threaded 版本的 Python 3.15
# 然后重新编译你的 C 扩展并测试

下面是一个简单的兼容性检查脚本,可以快速扫描代码中是否使用了已知被移除的 API:

"""quick_compat_check.py — 扫描项目源码中的潜在兼容问题"""
import ast
import sys
from pathlib import Path

# 3.15 中可能移除或变更的 API(根据各版本 deprecated 路径整理)
# 这里列出一些常见的,实际列表需参考官方 "What's New"
FLAGGED_IMPORTS = {
    # 示例:某些旧模块在后续版本移除
    # "asyncore": "3.12 已 deprecated,后续版本移除",
    # "imp": "3.4 已 deprecated,使用 importlib",
}

FLAGGED_ATTRS = {
    # 示例属性访问
    # ("sys", "setrecursionlimit"): "注意 free-threaded 下行为可能不同",
}

def scan_file(filepath: Path) -> list[str]:
    """解析单个 Python 文件,返回发现的警告列表"""
    warnings = []
    try:
        tree = ast.parse(filepath.read_text(encoding="utf-8"))
    except SyntaxError:
        return warnings

    for node in ast.walk(tree):
        if isinstance(node, ast.Import):
            for alias in node.names:
                if alias.name in FLAGGED_IMPORTS:
                    warnings.append(
                        f"{filepath}:{node.lineno} — "
                        f"import {alias.name}: {FLAGGED_IMPORTS[alias.name]}"
                    )
        elif isinstance(node, ast.ImportFrom):
            if node.module in FLAGGED_IMPORTS:
                warnings.append(
                    f"{filepath}:{node.lineno} — "
                    f"from {node.module}: {FLAGGED_IMPORTS[node.module]}"
                )
            for alias in node.names:
                key = (node.module or "", alias.name)
                if key in FLAGGED_ATTRS:
                    warnings.append(
                        f"{filepath}:{node.lineno} — "
                        f"{node.module}.{alias.name}: {FLAGGED_ATTRS[key]}"
                    )
    return warnings

def main():
    src_dir = Path(sys.argv[1] if len(sys.argv) > 1 else ".")
    all_warnings = []
    for py_file in src_dir.rglob("*.py"):
        all_warnings.extend(scan_file(py_file))

    if all_warnings:
        print(f"⚠ 发现 {len(all_warnings)} 个潜在兼容问题:")
        for w in all_warnings:
            print(w)
    else:
        print("✅ 未扫描到已知废弃 API 的使用")

if __name__ == "__main__":
    main()

运行方式:

python quick_compat_check.py ./src

注意:上面的 FLAGGED_IMPORTSFLAGGED_ATTRS 是示例结构。实际扫描时,你需要根据 Python 3.15 官方 "What's New in Python 3.15" 文档填充具体的废弃/移除列表。beta 阶段这份文档会持续更新。

给库维护者的建议

如果你维护一个被他人依赖的 Python 库,现在就该做这几件事:

步骤 动作 时间窗口
1 在 CI 中加入 3.15 beta 测试 现在
2 修复发现的兼容问题 beta 期间
3 发布兼容版本(可标记 python_requires>=3.9 等) 正式发布前
4 测试 free-threaded 模式(如有 C 扩展) 尽早

几个实操要点:

  • CI 配置:在 GitHub Actions 中加入 3.15.0-beta.2python-version 矩阵。beta 版本号格式可能需要查 actions/setup-python 的最新版本列表。
  • 允许失败但可见:初期可以设置 continue-on-error: true,但要让失败结果出现在 PR 检查里,别静默吞掉。
  • C 扩展必须测 free-threaded:用 free-threaded 构建重新编译,跑多线程测试。这是 3.15 最大的底层变化,不测就是在赌。

写在最后

Python 3.15 beta 2 不是"看看就好"的版本——它是你确认项目兼容性的最佳时机。特性已经冻结,行为基本定型,但还有时间反馈问题。花一两个小时把 CI 矩阵扩展一下,跑一遍测试,远比正式发布后紧急修补划算。

如果你是终端用户而非库维护者,同样值得装上 beta 2 跑跑自己的脚本和工作流,尤其是涉及多线程的场景——free-threaded 模式带来的行为差异可能比你预期的大。

下一个里程碑是 beta 3,之后是 beta 4,然后进入 release candidate。时间不多了。


相关推荐