Add support for CPython 3.15 (cpy315) and PyPy 8.0 (pypy312, pp80 ABI)
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- github-actions, python
- Lĩnh vực
- backend, build-system, ci-cd, release
Hướng nghiên cứu
Start with justfile _get-spec and confirm the PyPy 8.0 interpreter version and wheel tags before changing the environment matrix. Then check dependency wheel coverage, the named workflow files, and hatch_build.py for the new targets. Done means both builds produce correctly tagged NVX wheels on the listed platforms, tests and conformance checks run, and the release fileset check and wheel inventory cover the new wheels.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Goal
Two new interpreters in the build, test and release matrix:
cpy315: CPython 3.15. Not released yet. The current pre-release is
3.15.0rc3 (2026-10-02), the final
planned release candidate; 3.15.0 final is scheduled for 2026-10-09.pypy312: PyPy 8.0, officially released
(release post), with the new pp80 ABI.
PyPy 7.3.x (pp73) was the previous ABI line.
PyPy is a first-class, must-support runtime for autobahn, so pypy312 is the more important of the
two. CPython 3.15 is the easier one, and can go into CI and published wheels now (see below).
So the new suupported venvs table will look like:
- cpy315 => cpython-3.15
- cpy314 => cpython-3.14
- cpy313 => cpython-3.13
- cpy312 => cpython-3.12
- cpy311 => cpython-3.11
- pypy312 => pypy-3.12
- pypy311 => pypy-3.11
CPython 3.15: what the 3.15.0rc3 release notes say
- The ABI is frozen: "There will be no ABI changes from this point forward in the 3.15 series",
and "Any binary wheels built against Python 3.15.0 release candidates will work with future
versions of Python 3.15." - They ask projects to ship wheels now: "We strongly encourage maintainers of third-party
Python projects to prepare their projects for 3.15 during this phase, and publish Python 3.15
wheels on PyPI to be ready for the final release of 3.15.0". - Changes that can touch autobahn:
- PEP 686: UTF-8 is now the default encoding. Any
open()withoutencoding=changes behaviour
on platforms whose locale encoding was not UTF-8 (Windows). - PEP 803 / 820 / 793: a stable ABI for free-threaded builds. This is the
abi3ttag that
cryptography 50.0.2 already ships. Relevant to #1875 (free-threaded wheels), not needed for
cpy315itself. - The official macOS installers now install free-threading support by default. uv's interpreters
are not those installers, and_check-venv-abialready refuses a GIL/free-threaded mix-up, but
worth knowing when someone builds with a python.org interpreter on macOS.
- PEP 686: UTF-8 is now the default encoding. Any
What we know already
-
uv can install both: CPython 3.15.0rc3 since uv 0.12.23, PyPy 3.11.16 and 3.12.14 since
uv 0.12.19. -
The current PyPy pin in
_get-specispypy-3.11.15= PyPy 7.3.23, "last pp73 ABI; pinned
on purpose (PyPy 8.0 = new pp80 ABI)". -
cryptography (a base dependency since #1947, Rust/pyo3, no pure-Python fallback) already
ships wheels for both new targets, but not everywhere. cryptography 50.0.2 on PyPI:- CPython 3.15:
cp315-abi3.abi3twheels for manylinux (x86_64, aarch64, ppc64le, armv7l),
musllinux, macOS arm64 and win_amd64. - PyPy:
pp311-pypy311_pp80wheels for win_amd64 and macOS arm64 only. Linux PyPy wheels are
stillpp311-pypy311_pp73, and there are nopypy312wheels at all.
So today a
pypy312interpreter has to build cryptography from source (Rust plus a native
OpenSSL) on every platform. That is the same failure mode as #1960, where the Windows wheel job
broke on a source build. - CPython 3.15:
To confirm first (from the release notes; not reachable from our build host)
- Which Python versions PyPy 8.0 implements (3.11 and 3.12?), and the exact uv specs:
ispypy-3.11.16PyPy 8.0, i.e. pp80? - PyPy 8.0's wheel tags and extension suffix, e.g.
pp312-pypy312_pp80,.pypy312-pp80-...so.
Work, starting from justfile _get-spec
-
justfile_get-spec: addcpy315(cpython-3.15{{PY_PLATFORM_SUFFIX}}) andpypy312(an exact
PyPy 8.0 spec, pinned likepypy311, with a comment on the ABI).ENVS: add both. Windows ARM64 stays CPython-only (PyPy publishes no ARM64 Windows
interpreter)._check-venv-abi: nothing needed for PyPy (skipped);cpy315is a GIL build, so the existing
rule applies. Free-threadedcpy315tis out of scope here, see #1875.
-
Dependencies per new interpreter. Check that every base and
[all]dependency installs from
a wheel, or has a pure-Python fallback, oncp315andpp312/pp80, on Linux x86_64 / aarch64,
macOS arm64 and Windows x86_64:- cryptography, cffi, ujson, msgpack (CPython) / u-msgpack-python (PyPy);
- cbor2: CPython
>=6.1is Rust-only; PyPy is pinned to==5.9.0. Check that the pin still
installs on PyPy 3.12; - PyNaCl, zope.interface, brotli / brotlicffi, bjdata (CPython only).
Anything that needs a source build gets an explicit decision (build it in CI, wait for upstream
wheels, or leave that interpreter out on that platform), not a silent compile. Note:
install-build-toolsnow usespip install --prefer-binary(#1960), which picks an older
version with a wheel when one exists. With no wheel at all (cryptography onpypy312today) it
still compiles. -
Workflows: every place that names interpreters explicitly.
wheels.yml: viaENVS/build-all.wheels-docker.yml:build_envs: "cpy311 cpy312 cpy313 cpy314", explicit, without PyPy (#1877).wheels-arm64.yml: one matrix entry per version and libc.release.yml: artifact names per version (e.g.artifact_arm64_cp314).main.yml: Import Smoke Test and SerDes matrices;cpy314is used for quality and coverage.wstest.yml: thecpy314/pypy311clients and servers.
-
NVX native extension (
hatch_build.py): build and load the CFFI extension on both. The PyPy
extension suffix changes with pp80, so check that the suffix handling does not assumepp73. -
Release fileset check (
.cicd/actions/check-release-fileset, in wamp-proto/wamp-cicd): it
parses targets likepypy311-...and wheel tags likepp311-pypy311_pp73. Confirm it accepts
pypy312/pypy312_pp80andcp315. If not, that needs a wamp-cicd issue, since zlmdb and the
other packages share the check. -
Metadata and docs: the
Programming Language :: Python :: 3.15classifier (with the first
release that shipscp315wheels);docs/wheels-inventory.rst(new wheel names); changelog. -
PEP 686 (UTF-8 default): look for
open()/read_text()/write_text()without an
explicitencoding=insrc/autobahn, and make them explicit, so behaviour does not change
between 3.14 and 3.15 on Windows. A grep finds nine text-modeopen()calls without it:nvx/_xormasker.py:79,nvx/_utf8validator.py:81: read the C sources at build time;wamp/cryptosign.py:284,:300,:331: read signature / public-key files;util.py:944(/var/lib/dbus/machine-id),util.py:1029(writes a file),util.py:1063
(reads a key file);twisted/component.py:168: reads a PEM trust root.
Staging
pypy312: CI and published wheels as soon as the dependencies install without source builds,
or with a source build we deliberately accept.cpy315: CI now, and wheels for the next release built on 3.15.0rc3 or, from 2026-10-09, on
3.15.0 final. Per the release notes, RC-built wheels work with the final release, and python.org
asks for them to be on PyPI before final. The3.15classifier goes in with the first release
that shipscp315wheels.pypy311(pp73) stays as it is. Dropping it, or moving it to pp80, is a separate decision; Linux
has no pp80 cryptography wheels yet (#1960).
Acceptance
-
just build cpy315andjust build pypy312produce NVX wheels with the expected tags on
Linux x86_64 / aarch64, macOS arm64 and Windows x86_64. - The test suites (Twisted and asyncio), the import smoke tests and WebSocket conformance run on
both. - The release fileset check covers the new wheels;
docs/wheels-inventory.rstlists them. - Every dependency that needs a source build on a new interpreter is listed in this issue with
the decision taken.
Note: This issue was drafted with AI assistance (Claude Code).
- Ngôn ngữ chính
- Python
- Star
- 2.5k
- Fork
- 767
- Merge trung bình
- 1 ngày 1 giờ
- Pull request đã merge (30 ngày)
- 23
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của crossbario/autobahn-python
-
CI-CD enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
crossbario/autobahn-python#1945 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug CI-CD
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
crossbario/autobahn-python#1932 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
CI-CD enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
crossbario/autobahn-python#1829 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[BUG] extract_peer_certificate() raises AttributeError with pyOpenSSL >= 26.2.0 when the peer certificate has extensionsCó thể đã có người làm @oberstet đã nhận hôm nay. Đang mởbug wamp websocket
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
crossbario/autobahn-python#2014 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug CI-CD
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 52/100
crossbario/autobahn-python#2013 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của crossbario/autobahn-python
Issue tương tự
-
documentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 67/100
Maintainer thường phản hồi trong vòng 1 ngày
-
good first issue module-baseline needs triage ux
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
darnitdevorg/darnit#650 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
nyjc-computing/campus#938 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
nf-osi/nf-metadata-dictionary#1027 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug documentation
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 92/100
qatrackplus/qatrackplus#913 ·
Maintainer thường phản hồi trong vòng 3 ngày