Skip to content

Add Python 3.15 and free-threaded 3.15 to CI and the wheel builder - #1268

Open
honglei wants to merge 1 commit into
pyca:mainfrom
honglei:python-3.15
Open

honglei wants to merge 1 commit into
pyca:mainfrom
honglei:python-3.15

Conversation

@honglei

@honglei honglei commented Oct 10, 2026

Copy link
Copy Markdown

bcrypt 5.0.0 cannot be installed on free-threaded CPython 3.15: there is no
cp315t wheel, the abi3 wheels do not load on a free-threaded build, and the
5.0.0 sdist pins PyO3 0.26, whose build script stops with

error: The configured Python interpreter version (3.15) is newer than PyO3's maximum supported version (3.14)

main (PyO3 0.29.3) already builds and passes on 3.15t, so this only adds the
missing coverage and wheel rows:

  • ci.yml: test 3.15 and 3.15t on Linux, macOS and Windows.
  • wheel-builder.yml: build cp315-cp315t wheels on manylinux/musllinux,
    macOS and Windows, next to the existing cp314-cp314t rows. GIL-enabled 3.15
    is already covered by the cp39-abi3 wheels.
  • allow-prereleases: true on the four setup-python steps.
  • pyproject.toml: 3.15 classifier. CHANGELOG.rst: two entries.

I used version-specific cp315t wheels rather than the abi3.abi3t wheels
cryptography now ships, because setuptools 84.0.0 / setuptools-rust 1.13.0
still reject the limited API on free-threaded builds ("Py_LIMITED_API is
currently incompatible with Py_GIL_DISABLED"). Happy to switch if you would
rather wait for that.

Tested on Linux x86_64 with CPython 3.15.0 free-threaded:

  • main builds as bcrypt-5.0.0-cp315-cp315t-linux_x86_64.whl; 147 tests
    pass with the GIL disabled.
  • Replayed the manylinux job steps for cp315-cp315t in
    ghcr.io/pyca/cryptography-manylinux_2_28:x86_64: build, auditwheel repair, install and the smoke test succeed; the resulting wheel passes the
    147 tests on 3.15.0t.

Not tested locally: the macOS and Windows rows.

actions/setup-python currently serves only 3.15.0-rc.3, so the
setup-python steps get allow-prereleases: true. That makes 3.15 / 3.15t
resolve today and move to the final release on its own, without pinning an rc.

🤖 Generated with Claude Code

Test 3.15 and 3.15t on Linux, macOS and Windows, and build
cp315-cp315t wheels next to the existing cp314-cp314t ones. The
abi3 wheels already cover GIL-enabled 3.15.

Set allow-prereleases on the setup-python steps so 3.15 resolves
while the action only serves release candidates, and moves to the
final release on its own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant