Skip to content

Commit 10c727e

Browse files
feat: Python 3.14rc1 build by default (#2507)
1 parent f628c9d commit 10c727e

File tree

9 files changed

+63
-53
lines changed

9 files changed

+63
-53
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ While cibuildwheel itself requires a recent Python version to run (we support th
3131
| CPython 3.11 ||||| ✅² |||||| ✅⁵ | N/A | N/A | N/A |
3232
| CPython 3.12 ||||| ✅² |||||| ✅⁵ | N/A | N/A | ✅⁴ |
3333
| CPython 3.13³ ||||| ✅² |||||| ✅⁵ ||| N/A |
34-
| CPython 3.14³ ||||| ✅² |||||| ✅⁵ | N/A | N/A | N/A |
34+
| CPython 3.14 ||||| ✅² |||||| ✅⁵ | N/A | N/A | N/A |
3535
| PyPy 3.8 v7.3 |||| N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
3636
| PyPy 3.9 v7.3 |||| N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
3737
| 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
4040

4141
<sup>¹ PyPy & GraalPy are only supported for manylinux wheels.</sup><br>
4242
<sup>² Windows arm64 support is experimental.</sup><br>
43-
<sup>³ Free-threaded mode requires opt-in using [`enable`](https://cibuildwheel.pypa.io/en/stable/options/#enable).</sup><br>
43+
<sup>³ Free-threaded mode requires opt-in on 3.13 using [`enable`](https://cibuildwheel.pypa.io/en/stable/options/#enable).</sup><br>
4444
<sup>⁴ Experimental, not yet supported on PyPI, but can be used directly in web deployment. Use `--platform pyodide` to build.</sup><br>
4545
<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>
4646

cibuildwheel/resources/build-platforms.toml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,12 @@ python_configurations = [
165165
{ identifier = "cp313t-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.5/python-3.13.5-macos11.pkg" },
166166
{ identifier = "cp313t-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.5/python-3.13.5-macos11.pkg" },
167167
{ identifier = "cp313t-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.5/python-3.13.5-macos11.pkg" },
168-
{ identifier = "cp314-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0b4-macos11.pkg" },
169-
{ identifier = "cp314-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0b4-macos11.pkg" },
170-
{ identifier = "cp314-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0b4-macos11.pkg" },
171-
{ identifier = "cp314t-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0b4-macos11.pkg" },
172-
{ identifier = "cp314t-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0b4-macos11.pkg" },
173-
{ identifier = "cp314t-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0b4-macos11.pkg" },
168+
{ identifier = "cp314-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
169+
{ identifier = "cp314-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
170+
{ identifier = "cp314-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
171+
{ identifier = "cp314t-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
172+
{ identifier = "cp314t-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
173+
{ identifier = "cp314t-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
174174
{ identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_x86_64.tar.bz2" },
175175
{ identifier = "pp38-macosx_arm64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_arm64.tar.bz2" },
176176
{ 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 = [
199199
{ identifier = "cp313t-win32", version = "3.13.5", arch = "32" },
200200
{ identifier = "cp313-win_amd64", version = "3.13.5", arch = "64" },
201201
{ identifier = "cp313t-win_amd64", version = "3.13.5", arch = "64" },
202-
{ identifier = "cp314-win32", version = "3.14.0-b4", arch = "32" },
203-
{ identifier = "cp314t-win32", version = "3.14.0-b4", arch = "32" },
204-
{ identifier = "cp314-win_amd64", version = "3.14.0-b4", arch = "64" },
205-
{ identifier = "cp314t-win_amd64", version = "3.14.0-b4", arch = "64" },
202+
{ identifier = "cp314-win32", version = "3.14.0-rc1", arch = "32" },
203+
{ identifier = "cp314t-win32", version = "3.14.0-rc1", arch = "32" },
204+
{ identifier = "cp314-win_amd64", version = "3.14.0-rc1", arch = "64" },
205+
{ identifier = "cp314t-win_amd64", version = "3.14.0-rc1", arch = "64" },
206206
{ identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" },
207207
{ identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" },
208208
{ identifier = "cp311-win_arm64", version = "3.11.9", arch = "ARM64" },
209209
{ identifier = "cp312-win_arm64", version = "3.12.10", arch = "ARM64" },
210210
{ identifier = "cp313-win_arm64", version = "3.13.5", arch = "ARM64" },
211211
{ identifier = "cp313t-win_arm64", version = "3.13.5", arch = "ARM64" },
212-
{ identifier = "cp314-win_arm64", version = "3.14.0-b4", arch = "ARM64" },
213-
{ identifier = "cp314t-win_arm64", version = "3.14.0-b4", arch = "ARM64" },
212+
{ identifier = "cp314-win_arm64", version = "3.14.0-rc1", arch = "ARM64" },
213+
{ identifier = "cp314t-win_arm64", version = "3.14.0-rc1", arch = "ARM64" },
214214
{ identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" },
215215
{ identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-win64.zip" },
216216
{ identifier = "pp310-win_amd64", version = "3.10", arch = "64", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.19-win64.zip" },
Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,53 @@
11
[x86_64]
2-
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.07.20-2
3-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.07.20-2
4-
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.07.20-2
5-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2025.07.20-2
2+
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.07.23-1
3+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.07.23-1
4+
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.07.23-1
5+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2025.07.23-1
66

77
[i686]
8-
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.07.20-2
9-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2025.07.20-2
10-
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2025.07.20-2
11-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2025.07.20-2
8+
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.07.23-1
9+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2025.07.23-1
10+
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2025.07.23-1
11+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2025.07.23-1
1212

1313
[aarch64]
14-
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.07.20-2
15-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.07.20-2
16-
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.07.20-2
17-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2025.07.20-2
14+
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.07.23-1
15+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.07.23-1
16+
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.07.23-1
17+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2025.07.23-1
1818

1919
[ppc64le]
20-
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2025.07.20-2
21-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2025.07.20-2
22-
manylinux_2_34 = quay.io/pypa/manylinux_2_34_ppc64le:2025.07.20-2
23-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2025.07.20-2
20+
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2025.07.23-1
21+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2025.07.23-1
22+
manylinux_2_34 = quay.io/pypa/manylinux_2_34_ppc64le:2025.07.23-1
23+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2025.07.23-1
2424

2525
[s390x]
26-
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2025.07.20-2
27-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2025.07.20-2
28-
manylinux_2_34 = quay.io/pypa/manylinux_2_34_s390x:2025.07.20-2
29-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2025.07.20-2
26+
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2025.07.23-1
27+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2025.07.23-1
28+
manylinux_2_34 = quay.io/pypa/manylinux_2_34_s390x:2025.07.23-1
29+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2025.07.23-1
3030

3131
[pypy_x86_64]
32-
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.07.20-2
33-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.07.20-2
34-
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.07.20-2
32+
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.07.23-1
33+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.07.23-1
34+
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.07.23-1
3535

3636
[pypy_i686]
37-
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.07.20-2
38-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2025.07.20-2
39-
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2025.07.20-2
37+
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.07.23-1
38+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2025.07.23-1
39+
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2025.07.23-1
4040

4141
[pypy_aarch64]
42-
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.07.20-2
43-
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.07.20-2
44-
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.07.20-2
42+
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.07.23-1
43+
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.07.23-1
44+
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.07.23-1
4545

4646
[armv7l]
47-
manylinux_2_31 = quay.io/pypa/manylinux_2_31_armv7l:2025.07.20-2
48-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2025.07.20-2
47+
manylinux_2_31 = quay.io/pypa/manylinux_2_31_armv7l:2025.07.23-1
48+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2025.07.23-1
4949

5050
[riscv64]
51-
manylinux_2_39 = quay.io/pypa/manylinux_2_39_riscv64:2025.07.20-2
52-
musllinux_1_2 = quay.io/pypa/musllinux_1_2_riscv64:2025.07.20-2
51+
manylinux_2_39 = quay.io/pypa/manylinux_2_39_riscv64:2025.07.23-1
52+
musllinux_1_2 = quay.io/pypa/musllinux_1_2_riscv64:2025.07.23-1
5353

cibuildwheel/selector.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def __call__(self, build_id: str) -> bool:
8787
# filter out groups that are not enabled
8888
if EnableGroup.CPythonFreeThreading not in self.enable and fnmatch(build_id, "cp313t-*"):
8989
return False
90-
if EnableGroup.CPythonPrerelease not in self.enable and fnmatch(build_id, "cp314*"):
90+
if EnableGroup.CPythonPrerelease not in self.enable and fnmatch(build_id, "cp315*"):
9191
return False
9292
if EnableGroup.PyPy not in self.enable and fnmatch(build_id, "pp31*"):
9393
return False

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ py-version = "3.11"
148148
jobs = "0"
149149
fail-on = ["E", "F"]
150150
fail-under = "9.8"
151+
max-positional-arguments = "7"
151152
reports.output-format = "colorized"
152153
messages_control.enable = [
153154
"useless-suppression",

test/utils.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,15 +272,16 @@ def _expected_wheels(
272272
"cp311-cp311",
273273
"cp312-cp312",
274274
"cp313-cp313",
275+
"cp314-cp314",
276+
"cp314-cp314t",
275277
]
276278

277279
enable_groups = get_enable_groups()
278280
if EnableGroup.CPythonFreeThreading in enable_groups:
279281
python_abi_tags.append("cp313-cp313t")
280282

281283
if EnableGroup.CPythonPrerelease in enable_groups:
282-
python_abi_tags.append("cp314-cp314")
283-
python_abi_tags.append("cp314-cp314t")
284+
... # Add cp315 here when available
284285

285286
if EnableGroup.PyPyEoL in enable_groups:
286287
python_abi_tags += [

unit_test/build_selector_test.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ def test_build():
1515
assert build_selector("cp311-manylinux_x86_64")
1616
assert build_selector("cp312-manylinux_x86_64")
1717
assert build_selector("cp313-manylinux_x86_64")
18+
assert build_selector("cp314-manylinux_x86_64")
1819
assert build_selector("pp310-manylinux_x86_64")
1920
assert build_selector("pp311-manylinux_x86_64")
2021
assert build_selector("cp36-manylinux_i686")
@@ -36,6 +37,7 @@ def test_build():
3637
assert build_selector("cp311-win_amd64")
3738
assert build_selector("cp312-win_amd64")
3839
assert build_selector("cp313-win_amd64")
40+
assert build_selector("cp314-win_amd64")
3941
assert not build_selector("pp310-win_amd64")
4042
assert not build_selector("pp311-win_amd64")
4143

unit_test/linux_build_steps_test.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ def container_engines(
9090
"cp311-manylinux_x86_64",
9191
"cp312-manylinux_x86_64",
9292
"cp313-manylinux_x86_64",
93+
"cp314-manylinux_x86_64",
94+
"cp314t-manylinux_x86_64",
9395
]
94-
assert before_alls(build_steps[3]) == [""] * 3
95-
assert container_engines(build_steps[3]) == [default_container_engine] * 3
96+
assert before_alls(build_steps[3]) == [""] * 5
97+
assert container_engines(build_steps[3]) == [default_container_engine] * 5

unit_test/option_prepare_test.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from cibuildwheel.oci_container import OCIPlatform
1414
from cibuildwheel.util import file
1515

16-
DEFAULT_IDS = {"cp38", "cp39", "cp310", "cp311", "cp312", "cp313"}
16+
DEFAULT_IDS = {"cp38", "cp39", "cp310", "cp311", "cp312", "cp313", "cp314", "cp314t"}
1717
ALL_IDS = DEFAULT_IDS | {"cp313t", "pp38", "pp39", "pp310", "pp311", "gp311_242"}
1818

1919

@@ -155,6 +155,8 @@ def test_build_with_override_launches(monkeypatch, tmp_path):
155155
"cp312",
156156
"cp313",
157157
"cp313t",
158+
"cp314",
159+
"cp314t",
158160
"pp38",
159161
"pp39",
160162
"pp310",
@@ -177,6 +179,8 @@ def test_build_with_override_launches(monkeypatch, tmp_path):
177179
"cp312",
178180
"cp313",
179181
"cp313t",
182+
"cp314",
183+
"cp314t",
180184
"pp38",
181185
"pp39",
182186
"pp310",

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy