From 190c66c76ed60bbebb35cabbd205967b71ab7e61 Mon Sep 17 00:00:00 2001 From: Marcelo Duarte Date: Sun, 5 Oct 2025 23:37:57 -0300 Subject: [PATCH] Python 3.14 on macOS requires MACOSX_DEPLOYMENT_TARGET set to 10.15 --- README.md | 2 +- cibuildwheel/platforms/macos.py | 3 +++ docs/platforms.md | 3 ++- test/utils.py | 4 +++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 22cff6b0b..3c89f3708 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ While cibuildwheel itself requires a recent Python version to run (we support th ⁴ Experimental, not yet supported on PyPI, but can be used directly in web deployment. Use `--platform pyodide` to build.
⁵ manylinux armv7l support is experimental. As there are no RHEL based image for this architecture, it's using an Ubuntu based image instead.
-- Builds manylinux, musllinux, macOS 10.9+ (10.13+ for Python 3.12+), and Windows wheels for CPython, PyPy, and GraalPy +- Builds manylinux, musllinux, macOS 10.9+ (10.13+ for Python 3.12-3.13, 10.15+ for Python 3.14+), and Windows wheels for CPython, PyPy, and GraalPy - Works on GitHub Actions, Azure Pipelines, Travis CI, CircleCI, GitLab CI, and Cirrus CI - Bundles shared library dependencies on Linux and macOS through [auditwheel](https://github.com/pypa/auditwheel) and [delocate](https://github.com/matthew-brett/delocate) - Runs your library's tests against the wheel-installed version of your library diff --git a/cibuildwheel/platforms/macos.py b/cibuildwheel/platforms/macos.py index 05d5d1623..e329ccf37 100644 --- a/cibuildwheel/platforms/macos.py +++ b/cibuildwheel/platforms/macos.py @@ -289,8 +289,11 @@ def setup_python( # For arm64, the minimal deployment target is 11.0. # On x86_64 (or universal2), use 10.9 as a default. # CPython 3.12.6+ needs 10.13. + # CPython 3.14.0 needs 10.15. if config_is_arm64: default_target = "11.0" + elif Version(python_configuration.version) >= Version("3.14"): + default_target = "10.15" elif Version(python_configuration.version) >= Version("3.12"): default_target = "10.13" elif python_configuration.identifier.startswith("pp") and Version( diff --git a/docs/platforms.md b/docs/platforms.md index 551f293bb..1cb931ebc 100644 --- a/docs/platforms.md +++ b/docs/platforms.md @@ -63,7 +63,8 @@ macOS builds will honor the `MACOSX_DEPLOYMENT_TARGET` environment variable to c | Arch | Python version range | Minimum target | |-------|----------------------|----------------| | Intel | CPython 3.8-3.11 | 10.9 | -| Intel | CPython 3.12+ | 10.13 | +| Intel | CPython 3.12-3.13 | 10.13 | +| Intel | CPython 3.14+ | 10.15 | | AS | CPython or PyPy | 11 | | Intel | PyPy 3.8 | 10.13 | | Intel | PyPy 3.9+ | 10.15 | diff --git a/test/utils.py b/test/utils.py index 21fbb4f10..6acdc8044 100644 --- a/test/utils.py +++ b/test/utils.py @@ -366,8 +366,10 @@ def _expected_wheels( elif python_abi_tag.startswith("cp"): if python_abi_tag.startswith(("cp38", "cp39", "cp310", "cp311")): min_macosx = macosx_deployment_target - else: + elif python_abi_tag.startswith(("cp312", "cp313")): min_macosx = _floor_macosx(macosx_deployment_target, "10.13") + else: + min_macosx = _floor_macosx(macosx_deployment_target, "10.15") elif python_abi_tag.startswith("graalpy"): if python_abi_tag.startswith("graalpy311"): min_macosx = macosx_deployment_target