Skip to content

ci: build Python 3.15 wheels (stacked on #229) - #232

Open
iDoMeteor wants to merge 2 commits into
SpotlightKid:masterfrom
iDoMeteor:py315-wheels
Open

iDoMeteor wants to merge 2 commits into
SpotlightKid:masterfrom
iDoMeteor:py315-wheels

Conversation

@iDoMeteor

Copy link
Copy Markdown

Summary

Build Python 3.15 wheels, as requested by @shauneccles on #229.

This PR is stacked on #229 (Python 3.14 wheels, by @cpmpercussion) and contains
one commit on top of it, ci: build Python 3.15 wheels. The diff is only meaningful
once #229 is in: the first commit shown here is #229's. If #229 merges first, this
rebases to a single commit with no conflicts.

Changes (pyproject.toml, tox.ini only):

  • add cp315 to the [tool.cibuildwheel.linux], .macos and .windows build patterns
  • add the Programming Language :: Python :: 3.15 classifier
  • add py314 and py315 to the tox.ini envlist (py314 was missing after ci: build Python 3.14 wheels #229; with
    skip_missing_interpreters = True this is harmless where an interpreter is absent)

No workflow changes are needed, and no cpython-prerelease opt-in: #229 already moves
cibuildwheel to v4.2.1, and cibuildwheel 4.2.0 and later build CPython 3.15 by default
("CPython 3.15 wheels are now built by default - without the cpython-prerelease
enable set"; v4.2.1 bundles 3.15.0rc2).

Python 3.15 status (as of 2026-10-05)

  • 3.15.0rc3 was released 2026-10-02; 3.15.0 final is scheduled for 2026-10-09 (PEP 790).
  • The ABI has been frozen since 3.15.0rc1 (2026-08-04). The release notes say there will be
    no ABI changes from that point on and that wheels built against 3.15 release candidates
    will work with later 3.15 releases, so the wheels are safe to upload now and stay valid
    for the final release.
  • Tooling that the build resolves: Cython 3.3.0 ("changes were made to adapt to Python 3.15",
    and the cpython.array declarations were adapted for 3.15), meson-python 0.22.1, meson 1.12.1.
    pyproject.toml leaves cython unpinned, so a build today gets 3.3.0. trove-classifiers
    already knows the 3.15 classifier.

Sources: peps.python.org/pep-0790, python.org release pages for 3.15.0rc1 and rc3,
cibuildwheel changelog (v4.2.0, v4.2.1, v4.3.0), Cython CHANGES.rst for 3.3.0,
meson-python CHANGELOG.rst.

Verification

This repo's PR workflow, on GitHub Actions. pr_to_master.yml was run unchanged against this branch from a separate repo; only the checkout target and the artifact names differed. Every job passed: sdist, ubuntu-latest, ubuntu-24.04-arm, macos-latest and windows-latest, with cibuildwheel's tests run as configured. It built cp315 wheels for manylinux_x86_64, manylinux_aarch64, macosx_10_15_x86_64, macosx_11_0_arm64 and win_amd64, alongside #229's cp314 ones (41 wheels in total).

Also done locally (Linux x86_64, Fedora host):

  • cibuildwheel --print-build-identifiers (4.2.1) with this pyproject.toml selects cp315
    on all three platforms, in addition to everything ci: build Python 3.14 wheels #229 selects:

    • linux: cp315-manylinux_x86_64
    • macos: cp315-macosx_x86_64, cp315-macosx_arm64
    • windows: cp315-win_amd64

    It selects no cp315t (free-threaded) identifiers.

  • Built and tested with cibuildwheel 4.2.1 under podman, using the configured before-all,
    repair-wheel-command and test-command (pytest -v -m ci {package}/tests):

    • cp315-manylinux_x86_64 -> python_rtmidi-1.6.0-cp315-cp315-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
      (CPython 3.15.0rc2 in the image; 8 passed, 2 skipped)
    • cp314-manylinux_x86_64 for comparison -> the matching cp314 wheel (8 passed, 2 skipped)
  • Built and installed from source on a python-build-standalone CPython 3.15.0rc3 with
    Cython 3.3.0, meson-python 0.22.1 and meson 1.12.1 (pip install --no-build-isolation .),
    then ran the full test suite against real ALSA: 38 passed, 2 skipped, 1 failed. The failure
    is test_ci_wheels.py::test_linux_supports_jack, expected on a machine without JACK
    (the same test passes in the cibuildwheel container, which builds JACK in before-all).

  • pyproject.toml, the three workflow files and tox.ini parse cleanly.

Not verified:

Notes

🤖 Generated with Claude Code

cpmpercussion and others added 2 commits September 26, 2026 16:07
Add cp314 to the cibuildwheel build patterns and a 3.14 classifier, and
update cibuildwheel from v2.22 to v4.2.1 (v2.22 predates 3.14 support).
PyPy 3.9 and 3.10 are now behind cibuildwheel's pypy-eol flag, so enable
it to keep building those wheels.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add cp315 to the cibuildwheel build patterns on Linux, macOS and Windows,
a 3.15 classifier, and py314/py315 to the tox envlist (py314 was missing
from the list).

cibuildwheel >= 4.2.0 builds CPython 3.15 by default (no
"cpython-prerelease" opt-in needed), and the release candidates have a
frozen ABI, so the wheels remain valid for the final 3.15.0.

Co-Authored-By: Claude <noreply@anthropic.com>

This branch has not been deployed

No deployments
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.

2 participants