Python 3.15.0 beta 4 发布:在最终测试版上完成兼容性排查

2026-07-18 33 预计阅读时间: 1 分钟
来源: blog.python.org AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:8 分钟

Python 3.15.0 beta 4 已经发布,并且是 3.15 系列的最后一个 beta 版本。对应用开发者和库维护者来说,这不是立即升级生产环境的信号,而是一次明确的测试节点:现在应当把项目放到 3.15 上运行,尽早暴露语法、依赖、构建和运行时兼容问题。

“最后一个 beta”对项目意味着什么

Beta 版本仍然属于预发布版本,不应被当作稳定运行时直接替换生产环境。不过,最终 beta 很适合进入持续集成矩阵,因为项目越晚开始测试,后续发现问题时留给依赖升级、代码修改和上游反馈的时间就越少。

需要重点检查四类问题:

  • 项目源码能否被 Python 3.15 正常解析、导入和执行。
  • 测试套件是否暴露行为差异、弃用警告或边界条件变化。
  • 带有 C/C++、Rust 等原生扩展的依赖能否构建和导入。
  • 打包、类型检查、代码生成和命令行工具是否识别这个预发布版本。

对于纯 Python 项目,测试成本通常较低,可以尽早加入实验性任务。依赖原生扩展的项目则要额外关注 wheel 是否可用;如果安装工具退回源码构建,CI 镜像还需要编译器和相应的开发头文件。

先做一个可复制的环境检查

下面的脚本可以直接运行。它会确认当前解释器是否正好是 Python 3.15.0 beta 4,并执行几个适合作为环境冒烟测试的标准库操作。

将代码保存为 check_py315.py,然后使用已经安装好的 Python 3.15.0b4 执行:

import json
import platform
import sys
import tempfile
from pathlib import Path

expected = (3, 15, 0, "beta", 4)
actual = (
    sys.version_info.major,
    sys.version_info.minor,
    sys.version_info.micro,
    sys.version_info.releaselevel,
    sys.version_info.serial,
)

print(f"Interpreter: {sys.executable}")
print(f"Version:     {platform.python_version()}")

if actual != expected:
    raise SystemExit(f"Expected Python {expected}, got {actual}")

payload = {"runtime": "python", "version": platform.python_version()}
with tempfile.TemporaryDirectory() as directory:
    target = Path(directory) / "runtime.json"
    target.write_text(json.dumps(payload), encoding="utf-8")
    assert json.loads(target.read_text(encoding="utf-8")) == payload

print("Python 3.15.0b4 smoke test passed")

运行命令如下,其中 python3.15 需要替换成机器上实际的解释器路径:

python3.15 check_py315.py
python3.15 -m compileall -q src tests
python3.15 -m unittest discover -s tests -v

如果项目使用 pytest,可以在该解释器创建的隔离环境中测试:

python3.15 -m venv .venv315
. .venv315/bin/activate
python -m pip install --upgrade pip
python -m pip install -e '.[test]'
python -W default -m pytest

Windows PowerShell 用户应将激活命令替换为:

.venv315\Scripts\Activate.ps1

这里显式加入 -W default,是为了让测试日志显示默认可能被忽略的警告。不要只看测试是否通过;弃用警告往往会指出下一个版本周期可能真正失效的代码路径。

把 3.15 加入 CI,但允许实验任务独立失败

在正式支持 Python 3.15 之前,可以这样实践:保留稳定版本作为必过任务,同时增加一个允许失败的 3.15.0b4 任务。下面以 GitHub Actions 为示例,并假设所用 Python 安装 action 已经能够提供该预发布版本;如果暂时无法解析这个版本,应改用自行构建的运行器或镜像。

name: tests

on:
  push:
  pull_request:

jobs:
  test:
    continue-on-error: ${{ matrix.experimental }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - python: "3.13"
            experimental: false
          - python: "3.14"
            experimental: false
          - python: "3.15.0-beta.4"
            experimental: true

    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python }}
          allow-prereleases: true
      - run: python -m pip install --upgrade pip
      - run: python -m pip install -e '.[test]'
      - run: python -W default -m pytest

预发布版本的命名和可用性取决于 CI 工具,因此应先在单独分支验证配置。实验任务失败时,需要区分三种情况:项目自身不兼容、第三方依赖尚未支持,以及 CI 工具还没有对应解释器。只有第一类问题通常能直接在当前仓库修复。

升级时不要只盯着单元测试

一个完整的兼容性检查还应覆盖安装和发布链路。可以在干净环境中执行以下命令:

python3.15 -m venv /tmp/project-py315
. /tmp/project-py315/bin/activate
python -m pip install --upgrade pip build
python -m build
python -m pip install dist/*.whl
python -m unittest discover -s tests

这组命令会同时检查构建元数据、wheel 生成、wheel 安装以及安装后的测试。若项目提供命令行入口,还应调用一次真实命令,而不是仅仅测试内部函数。

遇到失败时,建议记录完整的解释器版本、操作系统、CPU 架构、依赖锁定结果和最小复现代码。Beta 测试的价值不在于得到一张“全部通过”的截图,而在于把问题压缩成能够定位和反馈的最小案例。

采用建议

Python 3.15.0 beta 4 适合开发机、临时虚拟环境和非阻塞 CI,不适合直接接管生产工作负载。团队可以按下面的顺序推进:

  1. 在隔离环境中安装 3.15.0b4,并确认测试工具能够启动。
  2. 运行编译检查、单元测试、集成测试和打包流程,同时显示警告。
  3. 单独标记原生扩展依赖,确认失败来自项目代码还是缺失的预编译 wheel。
  4. 将 3.15 任务加入 CI,但在正式承诺支持前保持为实验任务。
  5. 为每个失败保留最小复现,持续跟踪后续预发布版和稳定版上的结果。

最终 beta 的意义是把兼容性工作提前。现在发现并分类一个问题,通常比稳定版发布后在生产升级窗口里仓促处理更可控。


相关推荐