Skip to content

feat: support Python 3.15 - #175

Merged
PyYoshi merged 2 commits into
masterfrom
feat/python-3.15
Oct 5, 2026
Merged

PyYoshi merged 2 commits into
masterfrom
feat/python-3.15

Conversation

@PyYoshi

@PyYoshi PyYoshi commented Oct 5, 2026

Copy link
Copy Markdown
Owner

Summary

  • test CPython 3.15 and free-threaded 3.15t on Linux, macOS, and Windows
  • build cp315 and cp315t wheels and add the Python 3.15 classifier
  • bump cibuildwheel to v4.3.0, which builds and smoke-tests wheels against CPython 3.15.0rc3 (ABI-compatible with the final release, scheduled for 2026-10-09)
  • update dependencies to their latest releases:
    • uv lock --upgrade: ast-serialize 0.12.1, charset-normalizer 3.5.2, cryptography 50.0.2, idna 3.20, librt 0.16.0, mypy 2.4.0, pyproject-hooks 1.3.3, ruff 0.16.10, urllib3 2.8.0, zipp 4.1.1
    • raise the dev dependency-group lower bounds to the locked versions
    • astral-sh/setup-uv v10.1.0 → v10.2.0 (SHA-pinned), actions/download-artifact v7 → v8

The extension needs no source changes: the Cython output compiles against the 3.15 headers without deprecation warnings, and the existing freethreading_compatible directive keeps the GIL disabled on 3.15t. The build-system requirement Cython>=3.2.9,<3.4 is intentionally unchanged because Cython 3.2.9 also builds and passes the tests on 3.15 and 3.15t. Isolated builds pick Cython 3.3.0, which includes the upstream 3.15 adaptations.

actions/download-artifact v8 errors on digest mismatches by default and no longer unzips non-zip downloads. The tag-only publish job downloads only the zipped artifacts uploaded by upload-artifact@v7, so neither change affects it. That job does not run on pull requests.

Validation

  • 29 tests pass on CPython 3.11, 3.14, 3.15.0rc3, and free-threaded 3.15.0rc3t using the CI steps (uv sync --locked then uv run pytest)
  • free-threaded 3.15.0rc3t imports with -W error and leaves sys._is_gil_enabled() false
  • Ruff (check and format) and strict mypy pass with the upgraded tools
  • with cibuildwheel 4.3.0, real cp315-manylinux_x86_64 and cp315t-manylinux_x86_64 wheels build, repair, install, and pass tools/wheel_smoke.py
  • cibuildwheel 4.3.0 selects cp315/cp315t identifiers for Linux x86_64/aarch64, macOS x86_64/arm64, and Windows win32/amd64
  • the upgraded uv.lock (lock revision 5) passes lock --check and sync --locked with uv 0.9.26, the required-version minimum, as well as with uv 0.12.23

References

Test CPython 3.15 and free-threaded 3.15t on Linux, macOS, and Windows,
and build cp315/cp315t wheels. Bump cibuildwheel to v4.3.0 so wheels are
built and smoke-tested against CPython 3.15.0rc3, which is ABI-compatible
with the final release.
- Upgrade locked development dependencies to their latest releases and
  raise the dev group lower bounds to match
- Update astral-sh/setup-uv to v10.2.0 and actions/download-artifact to v8
@PyYoshi
PyYoshi merged commit 2859cb9 into master Oct 5, 2026
27 checks passed
@PyYoshi
PyYoshi deleted the feat/python-3.15 branch October 5, 2026 12:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant