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,不适合直接接管生产工作负载。团队可以按下面的顺序推进:
- 在隔离环境中安装 3.15.0b4,并确认测试工具能够启动。
- 运行编译检查、单元测试、集成测试和打包流程,同时显示警告。
- 单独标记原生扩展依赖,确认失败来自项目代码还是缺失的预编译 wheel。
- 将 3.15 任务加入 CI,但在正式承诺支持前保持为实验任务。
- 为每个失败保留最小复现,持续跟踪后续预发布版和稳定版上的结果。
最终 beta 的意义是把兼容性工作提前。现在发现并分类一个问题,通常比稳定版发布后在生产升级窗口里仓促处理更可控。