Skip to content

Support Python 3.13 and 3.14, drop Python 3.8 - #71

Merged
chrisn merged 1 commit into
bbc:masterfrom
elvum:claude/python-version-compatibility-3fae32
Oct 2, 2026
Merged

chrisn merged 1 commit into
bbc:masterfrom
elvum:claude/python-version-compatibility-3fae32

Conversation

@elvum

@elvum elvum commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

Summary

The tool was last confirmed compatible with a new Python release in May 2024 (3.12). Since then 3.13 and 3.14 have been released and 3.8 has reached end-of-life. This PR updates the supported range to Python 3.9–3.14.

  • CI / README: test matrix is now 3.9–3.14 on Ubuntu, macOS and Windows; 3.8 dropped.
  • numpy: removed the <2 cap. numpy 1.x has no wheels for Python 3.13+, so the cap made those versions uninstallable. Tests pass on numpy 2.0 through 2.5.
  • Metadata: added python_requires = >=3.9 and per-version classifiers.
  • SciPy on macOS + Python 3.10: SciPy 1.15.x macOS wheels fail to load on macOS 27 (_spropack has a malformed __DATA/__thread_bss section that the new dyld rejects). SciPy 1.16+ fixes it but requires Python 3.11+, so scipy != 1.15.* is excluded for Python 3.10 on macOS only, which resolves to 1.14.1. No upstream SciPy issue found; see e.g. build(deps): bump scipy floor for macOS 27 dyld compatibility Kiln-AI/Kiln#1771 for the same problem elsewhere.
  • requirements.txt: the exact pins (e.g. numpy==1.22.3) had no wheels for Python 3.11+, so the file was already uninstallable there. It now uses lower bounds matching setup.cfg. pytest stays at >=9.0.3 (CVE-2025-71176 fix) where available; Python 3.9 can't run pytest 9, so it gets >=8.4.2.

Testing

Run locally on macOS 27.0.1 (arm64):

Python numpy scipy librosa Result
3.9 2.0.2 1.13.1 0.11.0 7 passed
3.9 (minimum versions) 1.22.3 1.10.0 0.10.2 7 passed
3.10 2.2.6 1.14.1 0.11.0 7 passed
3.11 2.4.6 1.17.1 0.11.0 7 passed
3.12–3.14 2.5.3 1.18.1 1.0.0 7 passed

Also checked that pip install -r requirements.txt resolves with binary wheels on every version, and that the built wheel's metadata carries the environment markers correctly.

Notes for reviewers

  • librosa 1.0.0 (a major release) is now pulled in on Python 3.12+. Tests pass, but they cover a narrow slice of librosa.
  • Python 3.9 is the last version some OS vendors ship by default (macOS Command Line Tools, RHEL 9), which is why it's kept despite being EOL upstream. The scientific stack has stopped releasing for it (numpy 2.0.2, scipy 1.13.1 are the last).
  • Python 3.10 reaches EOL this month.

🤖 Generated with Claude Code

- Test on Python 3.9-3.14 in CI and update the README to match
- Remove the numpy <2 cap: numpy 1.x has no wheels for Python 3.13+,
  and the tests pass on numpy 2.0-2.5
- Declare python_requires >= 3.9 and per-version classifiers
- Exclude SciPy 1.15.x for Python 3.10 on macOS: its wheels fail to
  load on macOS 27 (malformed __thread_bss section in _spropack), and
  SciPy 1.16+ requires Python 3.11+, so 3.10 falls back to 1.14.1
- Change requirements.txt from exact pins (which had no wheels for
  Python 3.11+) to lower bounds matching setup.cfg; keep pytest >= 9.0.3
  (CVE-2025-71176 fix) where available, with 8.4.2 for Python 3.9

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

elvum commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor Author

Why 3.9–3.14?

The top of the range covers every current CPython release that our dependencies publish wheels for. 3.15.0 was scheduled for 1 Oct 2026 and can follow in a later PR. The bottom of the range follows the default Python on operating systems that still receive security updates. Vendors backport security fixes, so these versions stay in real use after upstream EOL.

OS release (still receiving security updates) Default python3 Upstream status Vendor support ends
macOS 27 / 26 / 15 3.9.6 (Command Line Tools)* EOL 2025-10-31 not announced by Apple
Windows 11; Windows 10 (paid ESU) none shipped† n/a Win 10 ESU: up to Oct 2028
Ubuntu 26.04 LTS 3.14 supported May 2031
Ubuntu 24.04 LTS 3.12 supported May 2029
Ubuntu 22.04 LTS 3.10 EOL 2026-10-01 May 2027
Ubuntu 20.04 / 18.04 (paid Ubuntu Pro) 3.8 / 3.6 EOL May 2030 / May 2028
Debian 13 trixie 3.13 supported Jun 2030 (incl. LTS)
Debian 12 bookworm (LTS) 3.11 supported Jun 2028
RHEL 10 3.12 (3.14 in AppStream) supported May 2035
RHEL 9 3.9 (3.12, 3.14 in AppStream) EOL May 2032
RHEL 8 3.6‡ (3.12 in AppStream) EOL May 2029
RHEL 7 (paid ELS) 2.7 (python3 is 3.6) EOL May 2029

* The Command Line Tools are installed separately from macOS, on first use of python3, git, etc., and Software Update then keeps them current, so this is the Python most developer Macs actually have. Apple doesn't document the bundled version. 3.9.6 is confirmed in CLT 26.6 (Apple developer forums) and CLT 27.0 (checked locally on macOS 27.0.1). macOS 14 is omitted: its last security update was 6 Aug 2026, and it was absent from the September 2026 releases.
† Typing python opens a Microsoft Store shortcut; Microsoft's guide installs 3.14 via winget or the Store.
‡ Nothing is installed by default; yum install python3 gives 3.6, which is supported for the full RHEL 8 life cycle.

Ubuntu 25.10 (9-month interim support) and Debian 11 (LTS ended 31 Aug 2026) are omitted. Debian 11 has third-party ELTS, which would also be covered by 3.9.

  • Dropping 3.8 affects only paid-support Ubuntu 20.04. Every other release with a default below 3.9 is already outside our range.
  • Keeping 3.9 covers macOS's Command Line Tools Python and RHEL 9's default, which is supported until 2032.
  • Keeping 3.10 covers Ubuntu 22.04 LTS, which has standard support until May 2027.

Sources: Python versions · Apple security releases · Apple forums: CLT Python · Windows 10 ESU · Python on Windows · Ubuntu release cycle · Ubuntu python3-defaults · Debian releases · Debian python3 · Debian LTS · RHEL life cycle · RHEL Application Streams · RHEL 10 Python · RHEL 9 Python · RHEL 8 Python · RHEL 7 ELS · RHEL 7.7 Python 3

All rows checked against the linked vendor sources on 2 Oct 2026.

@elvum

elvum commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor Author

A definitely-human comment from the real @elvum here - Claude Code has done a great job of the (exceedingly mechanical) work here, and I have high confidence in its results. The changes look reasonable and well-justified, and the CI runs in my fork all passed successfully. Note that GitHub's macos-latest runner is still macOS 26 at the time of writing, so it can't show the incompatibility between macOS 27 and SciPy 1.15.

It would be nice if Apple started shipping a version of Python that wasn't EoLed almost a year ago...

@elvum
elvum marked this pull request as ready for review October 2, 2026 18:36
@chrisn

chrisn commented Oct 2, 2026

Copy link
Copy Markdown
Member

Good stuff, thank you!

@chrisn
chrisn merged commit 6b8b12b into bbc:master Oct 2, 2026
39 of 40 checks passed
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