feat: Python 3.14rc1 build by default (#2507)

This commit is contained in:
cibuildwheel-bot[bot]
2025-07-23 20:59:02 -04:00
committed by GitHub
parent f628c9dd23
commit 10c727eed9
9 changed files with 63 additions and 53 deletions
+2 -2
View File
@@ -31,7 +31,7 @@ While cibuildwheel itself requires a recent Python version to run (we support th
| CPython 3.11 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | N/A |
| CPython 3.12 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | ✅⁴ |
| CPython 3.13³ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | ✅ | ✅ | N/A |
| CPython 3.14³ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | N/A |
| CPython 3.14 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | N/A |
| PyPy 3.8 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
| PyPy 3.9 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
| PyPy 3.10 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
@@ -40,7 +40,7 @@ While cibuildwheel itself requires a recent Python version to run (we support th
<sup>¹ PyPy & GraalPy are only supported for manylinux wheels.</sup><br>
<sup>² Windows arm64 support is experimental.</sup><br>
<sup>³ Free-threaded mode requires opt-in using [`enable`](https://cibuildwheel.pypa.io/en/stable/options/#enable).</sup><br>
<sup>³ Free-threaded mode requires opt-in on 3.13 using [`enable`](https://cibuildwheel.pypa.io/en/stable/options/#enable).</sup><br>
<sup>⁴ Experimental, not yet supported on PyPI, but can be used directly in web deployment. Use `--platform pyodide` to build.</sup><br>
<sup>⁵ manylinux armv7l support is experimental. As there are no RHEL based image for this architecture, it's using an Ubuntu based image instead.</sup><br>
+12 -12
View File
@@ -165,12 +165,12 @@ python_configurations = [
{ identifier = "cp313t-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.5/python-3.13.5-macos11.pkg" },
{ identifier = "cp313t-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.5/python-3.13.5-macos11.pkg" },
{ identifier = "cp313t-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.5/python-3.13.5-macos11.pkg" },
{ identifier = "cp314-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0b4-macos11.pkg" },
{ identifier = "cp314-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0b4-macos11.pkg" },
{ identifier = "cp314-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0b4-macos11.pkg" },
{ identifier = "cp314t-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0b4-macos11.pkg" },
{ identifier = "cp314t-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0b4-macos11.pkg" },
{ identifier = "cp314t-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0b4-macos11.pkg" },
{ identifier = "cp314-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
{ identifier = "cp314-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
{ identifier = "cp314-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
{ identifier = "cp314t-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
{ identifier = "cp314t-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
{ identifier = "cp314t-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
{ identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_x86_64.tar.bz2" },
{ identifier = "pp38-macosx_arm64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_arm64.tar.bz2" },
{ identifier = "pp39-macosx_x86_64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-macos_x86_64.tar.bz2" },
@@ -199,18 +199,18 @@ python_configurations = [
{ identifier = "cp313t-win32", version = "3.13.5", arch = "32" },
{ identifier = "cp313-win_amd64", version = "3.13.5", arch = "64" },
{ identifier = "cp313t-win_amd64", version = "3.13.5", arch = "64" },
{ identifier = "cp314-win32", version = "3.14.0-b4", arch = "32" },
{ identifier = "cp314t-win32", version = "3.14.0-b4", arch = "32" },
{ identifier = "cp314-win_amd64", version = "3.14.0-b4", arch = "64" },
{ identifier = "cp314t-win_amd64", version = "3.14.0-b4", arch = "64" },
{ identifier = "cp314-win32", version = "3.14.0-rc1", arch = "32" },
{ identifier = "cp314t-win32", version = "3.14.0-rc1", arch = "32" },
{ identifier = "cp314-win_amd64", version = "3.14.0-rc1", arch = "64" },
{ identifier = "cp314t-win_amd64", version = "3.14.0-rc1", arch = "64" },
{ identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" },
{ identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" },
{ identifier = "cp311-win_arm64", version = "3.11.9", arch = "ARM64" },
{ identifier = "cp312-win_arm64", version = "3.12.10", arch = "ARM64" },
{ identifier = "cp313-win_arm64", version = "3.13.5", arch = "ARM64" },
{ identifier = "cp313t-win_arm64", version = "3.13.5", arch = "ARM64" },
{ identifier = "cp314-win_arm64", version = "3.14.0-b4", arch = "ARM64" },
{ identifier = "cp314t-win_arm64", version = "3.14.0-b4", arch = "ARM64" },
{ identifier = "cp314-win_arm64", version = "3.14.0-rc1", arch = "ARM64" },
{ identifier = "cp314t-win_arm64", version = "3.14.0-rc1", arch = "ARM64" },
{ identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" },
{ identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-win64.zip" },
{ identifier = "pp310-win_amd64", version = "3.10", arch = "64", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.19-win64.zip" },
+33 -33
View File
@@ -1,53 +1,53 @@
[x86_64]
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.07.20-2
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.07.20-2
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.07.20-2
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2025.07.20-2
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.07.23-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.07.23-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.07.23-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2025.07.23-1
[i686]
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.07.20-2
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2025.07.20-2
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2025.07.20-2
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2025.07.20-2
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.07.23-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2025.07.23-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2025.07.23-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2025.07.23-1
[aarch64]
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.07.20-2
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.07.20-2
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.07.20-2
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2025.07.20-2
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.07.23-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.07.23-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.07.23-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2025.07.23-1
[ppc64le]
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2025.07.20-2
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2025.07.20-2
manylinux_2_34 = quay.io/pypa/manylinux_2_34_ppc64le:2025.07.20-2
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2025.07.20-2
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2025.07.23-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2025.07.23-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_ppc64le:2025.07.23-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2025.07.23-1
[s390x]
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2025.07.20-2
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2025.07.20-2
manylinux_2_34 = quay.io/pypa/manylinux_2_34_s390x:2025.07.20-2
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2025.07.20-2
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2025.07.23-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2025.07.23-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_s390x:2025.07.23-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2025.07.23-1
[pypy_x86_64]
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.07.20-2
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.07.20-2
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.07.20-2
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.07.23-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.07.23-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.07.23-1
[pypy_i686]
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.07.20-2
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2025.07.20-2
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2025.07.20-2
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.07.23-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2025.07.23-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2025.07.23-1
[pypy_aarch64]
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.07.20-2
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.07.20-2
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.07.20-2
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.07.23-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.07.23-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.07.23-1
[armv7l]
manylinux_2_31 = quay.io/pypa/manylinux_2_31_armv7l:2025.07.20-2
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2025.07.20-2
manylinux_2_31 = quay.io/pypa/manylinux_2_31_armv7l:2025.07.23-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2025.07.23-1
[riscv64]
manylinux_2_39 = quay.io/pypa/manylinux_2_39_riscv64:2025.07.20-2
musllinux_1_2 = quay.io/pypa/musllinux_1_2_riscv64:2025.07.20-2
manylinux_2_39 = quay.io/pypa/manylinux_2_39_riscv64:2025.07.23-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_riscv64:2025.07.23-1
+1 -1
View File
@@ -87,7 +87,7 @@ class BuildSelector:
# filter out groups that are not enabled
if EnableGroup.CPythonFreeThreading not in self.enable and fnmatch(build_id, "cp313t-*"):
return False
if EnableGroup.CPythonPrerelease not in self.enable and fnmatch(build_id, "cp314*"):
if EnableGroup.CPythonPrerelease not in self.enable and fnmatch(build_id, "cp315*"):
return False
if EnableGroup.PyPy not in self.enable and fnmatch(build_id, "pp31*"):
return False
+1
View File
@@ -148,6 +148,7 @@ py-version = "3.11"
jobs = "0"
fail-on = ["E", "F"]
fail-under = "9.8"
max-positional-arguments = "7"
reports.output-format = "colorized"
messages_control.enable = [
"useless-suppression",
+3 -2
View File
@@ -272,6 +272,8 @@ def _expected_wheels(
"cp311-cp311",
"cp312-cp312",
"cp313-cp313",
"cp314-cp314",
"cp314-cp314t",
]
enable_groups = get_enable_groups()
@@ -279,8 +281,7 @@ def _expected_wheels(
python_abi_tags.append("cp313-cp313t")
if EnableGroup.CPythonPrerelease in enable_groups:
python_abi_tags.append("cp314-cp314")
python_abi_tags.append("cp314-cp314t")
... # Add cp315 here when available
if EnableGroup.PyPyEoL in enable_groups:
python_abi_tags += [
+2
View File
@@ -15,6 +15,7 @@ def test_build():
assert build_selector("cp311-manylinux_x86_64")
assert build_selector("cp312-manylinux_x86_64")
assert build_selector("cp313-manylinux_x86_64")
assert build_selector("cp314-manylinux_x86_64")
assert build_selector("pp310-manylinux_x86_64")
assert build_selector("pp311-manylinux_x86_64")
assert build_selector("cp36-manylinux_i686")
@@ -36,6 +37,7 @@ def test_build():
assert build_selector("cp311-win_amd64")
assert build_selector("cp312-win_amd64")
assert build_selector("cp313-win_amd64")
assert build_selector("cp314-win_amd64")
assert not build_selector("pp310-win_amd64")
assert not build_selector("pp311-win_amd64")
+4 -2
View File
@@ -90,6 +90,8 @@ def test_linux_container_split(tmp_path: Path, monkeypatch: pytest.MonkeyPatch)
"cp311-manylinux_x86_64",
"cp312-manylinux_x86_64",
"cp313-manylinux_x86_64",
"cp314-manylinux_x86_64",
"cp314t-manylinux_x86_64",
]
assert before_alls(build_steps[3]) == [""] * 3
assert container_engines(build_steps[3]) == [default_container_engine] * 3
assert before_alls(build_steps[3]) == [""] * 5
assert container_engines(build_steps[3]) == [default_container_engine] * 5
+5 -1
View File
@@ -13,7 +13,7 @@ from cibuildwheel.__main__ import main
from cibuildwheel.oci_container import OCIPlatform
from cibuildwheel.util import file
DEFAULT_IDS = {"cp38", "cp39", "cp310", "cp311", "cp312", "cp313"}
DEFAULT_IDS = {"cp38", "cp39", "cp310", "cp311", "cp312", "cp313", "cp314", "cp314t"}
ALL_IDS = DEFAULT_IDS | {"cp313t", "pp38", "pp39", "pp310", "pp311", "gp311_242"}
@@ -155,6 +155,8 @@ before-all = "true"
"cp312",
"cp313",
"cp313t",
"cp314",
"cp314t",
"pp38",
"pp39",
"pp310",
@@ -177,6 +179,8 @@ before-all = "true"
"cp312",
"cp313",
"cp313t",
"cp314",
"cp314t",
"pp38",
"pp39",
"pp310",