Repository navigation
Add support for Python 3.14 - #198
Conversation
Build and test wheels for CPython 3.14 on Windows, Linux (x86_64, aarch64) and macOS. Existing Python versions keep building with Cython 3.0.x; only 3.14 uses Cython 3.1.x, the first series supporting it. cibuildwheel 2.x can't build cp314, so move to 3.4.1, keeping the pip build frontend and the manylinux2014 image as before. The manylinux2014 image it pins builds Python 3.10+ against a newer OpenSSL 3, which the OpenSSL 3.0.8 in ffmpeg_build/lib would shadow, breaking pip; so LD_LIBRARY_PATH is now only set for auditwheel repair. Pin CI Python to 3.14 where it used 3.x, which now resolves to 3.15. cibuildwheel raises the Intel macOS target to 10.15 for 3.14, so the merge script also fuses macosx_10_15_x86_64 wheels into universal2.
macos-13 runners are retired; use macos-15-intel. Its Xcode 16 SDK needs: - zlib 1.2.13 -> 1.3.1: 1.2.13's fdopen macro breaks against the SDK headers. - libpng 1.6.39 -> 1.6.41: drops the <fp.h> include. - An explicit libvpx target: 1.14.1's configure doesn't recognize darwin24 and falls back to a generic ELF target. Pass darwin20, as the arm64 build already does; it uses the same flags macos-13 auto-detected. Include dep_versions.sh in the macOS dependency cache key so version bumps rebuild.
git over https fails inside the manylinux2014 container ("remote
helper 'https' aborted session") for every host, so clone x264, fdk-aac
and libvpx on the runner and copy them in. build-wheels.sh still clones
directly when run standalone.
4c09f85 to
5a265d9
Compare
|
Thank you! |
|
Thanks that was quick! Could you rerun the two linux_wheels jobs (x86_64 and aarch64) in the v4.5.4 release run? Cross ref the current kivy workaround kivy/kivy#9473 for context. |
|
Should be fixed, I think!? |
|
Yes that did it and I could close my workaround PR, thank you 🙏 |
Adds Python 3.14 wheels and testing on Windows, Linux (x86_64, aarch64) and macOS (x86_64, arm64, universal2). Support for existing Python versions is unchanged, and the change is kept deliberately low risk; dropping old Pythons and adding 3.15 are left for a later release alongside Kivy 2.4.
Python 3.14 support
setup.pyclassifiers.cython~=3.1.8, the first series that supports 3.14. All other Python versions keepcython~=3.0.11, so their builds are unchanged. This uses environment markers inpyproject.toml, the matchingsetup_requiresinsetup.py, and the Windows CI install. No.pyxchanges were needed; Cython 3.1 emits the same warnings as 3.0.~=2.23.3→~=3.4.1, since 2.x can't build cp314. Two cibuildwheel 3 default changes are reverted to keep builds as before:CIBW_BUILD_FRONTEND: pip, and themanylinux2014image on both architectures (instead of the newmanylinux_2_28default).python-version: 3.xnow use'3.14'.3.xnow resolves to 3.15, which has no wheels and isn't supported by Cython 3.1.merge_osx_deps.shalso fusesmacosx_10_15_x86_64wheels, so 3.14 gets a universal2 wheel too. Wheels for other versions are unaffected (still 10.13).CI repairs (pre-existing breakages, unrelated to 3.14)
A fresh CI build of
mastercurrently fails. These are the minimum fixes needed to get it green:macos-13runners are retired → usemacos-15-intelfor both macOS jobs. Its Xcode 16 SDK needs:fdopenmacro breaks against the new SDK headers)<fp.h>include; same fix Kivy made in 💚 Repair maintenance macOS dependency CI kivy/kivy#9461)configuredoesn't recognize darwin24 and falls back to a generic ELF target. The x86_64 build now passes--target=x86_64-darwin20-gccexplicitly, as the arm64 build already does. That gives the same flagsmacos-13auto-detected.dep_versions.shis now part of the macOS FFmpeg cache key, so version bumps actually rebuild.gitover HTTPS fails inside the manylinux2014 container (fatal: remote helper 'https' aborted session, for code.videolan.org and GitHub alike). x264, fdk-aac and libvpx are now cloned on the runner and copied into the container.build-wheels.shstill clones directly when run standalone.LD_LIBRARY_PATHis now only set forauditwheel repair. The newer manylinux2014 image builds Python 3.10+ against a newer OpenSSL 3. Withffmpeg_build/lib(which contains OpenSSL 3.0.8) onLD_LIBRARY_PATHfor the whole build, those Pythons lost theirsslmodule and pip couldn't install build dependencies.Testing
cython~=3.1.8.Notes
cp314t) wheels are not built.nogilto end of function signatures #193, Tentative support/test for Python 3.14 #197.