Skip to content

Commit 44c4742

Browse files
authored
feat: add Python 3.13 beta 1 (#1815)
1 parent c021744 commit 44c4742

File tree

11 files changed

+67
-12
lines changed

11 files changed

+67
-12
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
pipx run nox -s pylint
3434
3535
test:
36-
name: Test cibuildwheel on ${{ matrix.os }}
36+
name: Test cibuildwheel on ${{ matrix.os }} (${{ matrix.python_version }})
3737
needs: lint
3838
runs-on: ${{ matrix.os }}
3939
strategy:

.github/workflows/update-dependencies.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424

2525
- uses: wntrblm/[email protected]
2626
with:
27-
python-versions: "3.7, 3.8, 3.9, 3.10, 3.11, 3.12"
27+
python-versions: "3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13"
2828

2929
- name: "Run update: dependencies"
3030
run: nox --force-color -s update_constraints

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,24 @@ Python wheels are great. Building them across **Mac, Linux, Windows**, on **mult
2222
What does it do?
2323
----------------
2424

25-
| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | Windows Arm64 | manylinux<br/>musllinux x86_64 | manylinux<br/>musllinux i686 | manylinux<br/>musllinux aarch64 | manylinux<br/>musllinux ppc64le | manylinux<br/>musllinux s390x |
25+
| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | Windows Arm64 | manylinux<br/>musllinux x86_64 | manylinux<br/>musllinux i686 | manylinux<br/>musllinux aarch64 | manylinux<br/>musllinux ppc64le | manylinux<br/>musllinux s390x |
2626
|----------------|----|-----|-----|-----|-----|----|-----|----|-----|-----|
2727
| CPython 3.6 || N/A ||| N/A ||||||
2828
| CPython 3.7 || N/A ||| N/A ||||||
2929
| CPython 3.8 ||||| N/A ||||||
3030
| CPython 3.9 ||||| ✅² ||||||
3131
| CPython 3.10 ||||| ✅² ||||||
3232
| CPython 3.11 ||||| ✅² ||||||
33-
| CPython 3.12 ||||| ✅² ||||||
33+
| CPython 3.12 ||||| ✅² ||||||
34+
| CPython 3.13³ ||||| ✅² ||||||
3435
| PyPy 3.7 v7.3 || N/A || N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A |
3536
| PyPy 3.8 v7.3 |||| N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A |
3637
| PyPy 3.9 v7.3 |||| N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A |
3738
| PyPy 3.10 v7.3 |||| N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A |
3839

3940
<sup>¹ PyPy is only supported for manylinux wheels.</sup><br>
4041
<sup>² Windows arm64 support is experimental.</sup><br>
42+
<sup>³ CPython 3.13 is available using the [CIBW_PRERELEASE_PYTHONS](https://cibuildwheel.pypa.io/en/stable/options/#prerelease-pythons) option.</sup><br>
4143

4244
- Builds manylinux, musllinux, macOS 10.9+, and Windows wheels for CPython and PyPy
4345
- Works on GitHub Actions, Azure Pipelines, Travis CI, AppVeyor, CircleCI, GitLab CI, and Cirrus CI

cibuildwheel/resources/build-platforms.toml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ python_configurations = [
77
{ identifier = "cp310-manylinux_x86_64", version = "3.10", path_str = "/opt/python/cp310-cp310" },
88
{ identifier = "cp311-manylinux_x86_64", version = "3.11", path_str = "/opt/python/cp311-cp311" },
99
{ identifier = "cp312-manylinux_x86_64", version = "3.12", path_str = "/opt/python/cp312-cp312" },
10+
{ identifier = "cp313-manylinux_x86_64", version = "3.13", path_str = "/opt/python/cp313-cp313" },
1011
{ identifier = "cp36-manylinux_i686", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
1112
{ identifier = "cp37-manylinux_i686", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
1213
{ identifier = "cp38-manylinux_i686", version = "3.8", path_str = "/opt/python/cp38-cp38" },
1314
{ identifier = "cp39-manylinux_i686", version = "3.9", path_str = "/opt/python/cp39-cp39" },
1415
{ identifier = "cp310-manylinux_i686", version = "3.10", path_str = "/opt/python/cp310-cp310" },
1516
{ identifier = "cp311-manylinux_i686", version = "3.11", path_str = "/opt/python/cp311-cp311" },
1617
{ identifier = "cp312-manylinux_i686", version = "3.12", path_str = "/opt/python/cp312-cp312" },
18+
{ identifier = "cp313-manylinux_i686", version = "3.13", path_str = "/opt/python/cp313-cp313" },
1719
{ identifier = "pp37-manylinux_x86_64", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" },
1820
{ identifier = "pp38-manylinux_x86_64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" },
1921
{ identifier = "pp39-manylinux_x86_64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" },
@@ -25,20 +27,23 @@ python_configurations = [
2527
{ identifier = "cp310-manylinux_aarch64", version = "3.10", path_str = "/opt/python/cp310-cp310" },
2628
{ identifier = "cp311-manylinux_aarch64", version = "3.11", path_str = "/opt/python/cp311-cp311" },
2729
{ identifier = "cp312-manylinux_aarch64", version = "3.12", path_str = "/opt/python/cp312-cp312" },
30+
{ identifier = "cp313-manylinux_aarch64", version = "3.13", path_str = "/opt/python/cp313-cp313" },
2831
{ identifier = "cp36-manylinux_ppc64le", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
2932
{ identifier = "cp37-manylinux_ppc64le", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
3033
{ identifier = "cp38-manylinux_ppc64le", version = "3.8", path_str = "/opt/python/cp38-cp38" },
3134
{ identifier = "cp39-manylinux_ppc64le", version = "3.9", path_str = "/opt/python/cp39-cp39" },
3235
{ identifier = "cp310-manylinux_ppc64le", version = "3.10", path_str = "/opt/python/cp310-cp310" },
3336
{ identifier = "cp311-manylinux_ppc64le", version = "3.11", path_str = "/opt/python/cp311-cp311" },
3437
{ identifier = "cp312-manylinux_ppc64le", version = "3.12", path_str = "/opt/python/cp312-cp312" },
38+
{ identifier = "cp313-manylinux_ppc64le", version = "3.13", path_str = "/opt/python/cp313-cp313" },
3539
{ identifier = "cp36-manylinux_s390x", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
3640
{ identifier = "cp37-manylinux_s390x", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
3741
{ identifier = "cp38-manylinux_s390x", version = "3.8", path_str = "/opt/python/cp38-cp38" },
3842
{ identifier = "cp39-manylinux_s390x", version = "3.9", path_str = "/opt/python/cp39-cp39" },
3943
{ identifier = "cp310-manylinux_s390x", version = "3.10", path_str = "/opt/python/cp310-cp310" },
4044
{ identifier = "cp311-manylinux_s390x", version = "3.11", path_str = "/opt/python/cp311-cp311" },
4145
{ identifier = "cp312-manylinux_s390x", version = "3.12", path_str = "/opt/python/cp312-cp312" },
46+
{ identifier = "cp313-manylinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313" },
4247
{ identifier = "pp37-manylinux_aarch64", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" },
4348
{ identifier = "pp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" },
4449
{ identifier = "pp39-manylinux_aarch64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" },
@@ -54,34 +59,39 @@ python_configurations = [
5459
{ identifier = "cp310-musllinux_x86_64", version = "3.10", path_str = "/opt/python/cp310-cp310" },
5560
{ identifier = "cp311-musllinux_x86_64", version = "3.11", path_str = "/opt/python/cp311-cp311" },
5661
{ identifier = "cp312-musllinux_x86_64", version = "3.12", path_str = "/opt/python/cp312-cp312" },
62+
{ identifier = "cp313-musllinux_x86_64", version = "3.13", path_str = "/opt/python/cp313-cp313" },
5763
{ identifier = "cp36-musllinux_i686", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
5864
{ identifier = "cp37-musllinux_i686", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
5965
{ identifier = "cp38-musllinux_i686", version = "3.8", path_str = "/opt/python/cp38-cp38" },
6066
{ identifier = "cp39-musllinux_i686", version = "3.9", path_str = "/opt/python/cp39-cp39" },
6167
{ identifier = "cp310-musllinux_i686", version = "3.10", path_str = "/opt/python/cp310-cp310" },
6268
{ identifier = "cp311-musllinux_i686", version = "3.11", path_str = "/opt/python/cp311-cp311" },
6369
{ identifier = "cp312-musllinux_i686", version = "3.12", path_str = "/opt/python/cp312-cp312" },
70+
{ identifier = "cp313-musllinux_i686", version = "3.13", path_str = "/opt/python/cp313-cp313" },
6471
{ identifier = "cp36-musllinux_aarch64", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
6572
{ identifier = "cp37-musllinux_aarch64", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
6673
{ identifier = "cp38-musllinux_aarch64", version = "3.8", path_str = "/opt/python/cp38-cp38" },
6774
{ identifier = "cp39-musllinux_aarch64", version = "3.9", path_str = "/opt/python/cp39-cp39" },
6875
{ identifier = "cp310-musllinux_aarch64", version = "3.10", path_str = "/opt/python/cp310-cp310" },
6976
{ identifier = "cp311-musllinux_aarch64", version = "3.11", path_str = "/opt/python/cp311-cp311" },
7077
{ identifier = "cp312-musllinux_aarch64", version = "3.12", path_str = "/opt/python/cp312-cp312" },
78+
{ identifier = "cp313-musllinux_aarch64", version = "3.13", path_str = "/opt/python/cp313-cp313" },
7179
{ identifier = "cp36-musllinux_ppc64le", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
7280
{ identifier = "cp37-musllinux_ppc64le", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
7381
{ identifier = "cp38-musllinux_ppc64le", version = "3.8", path_str = "/opt/python/cp38-cp38" },
7482
{ identifier = "cp39-musllinux_ppc64le", version = "3.9", path_str = "/opt/python/cp39-cp39" },
7583
{ identifier = "cp310-musllinux_ppc64le", version = "3.10", path_str = "/opt/python/cp310-cp310" },
7684
{ identifier = "cp311-musllinux_ppc64le", version = "3.11", path_str = "/opt/python/cp311-cp311" },
7785
{ identifier = "cp312-musllinux_ppc64le", version = "3.12", path_str = "/opt/python/cp312-cp312" },
86+
{ identifier = "cp313-musllinux_ppc64le", version = "3.13", path_str = "/opt/python/cp313-cp313" },
7887
{ identifier = "cp36-musllinux_s390x", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
7988
{ identifier = "cp37-musllinux_s390x", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
8089
{ identifier = "cp38-musllinux_s390x", version = "3.8", path_str = "/opt/python/cp38-cp38" },
8190
{ identifier = "cp39-musllinux_s390x", version = "3.9", path_str = "/opt/python/cp39-cp39" },
8291
{ identifier = "cp310-musllinux_s390x", version = "3.10", path_str = "/opt/python/cp310-cp310" },
8392
{ identifier = "cp311-musllinux_s390x", version = "3.11", path_str = "/opt/python/cp311-cp311" },
8493
{ identifier = "cp312-musllinux_s390x", version = "3.12", path_str = "/opt/python/cp312-cp312" },
94+
{ identifier = "cp313-musllinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313" },
8595
]
8696

8797
[macos]
@@ -103,6 +113,9 @@ python_configurations = [
103113
{ identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.3/python-3.12.3-macos11.pkg" },
104114
{ identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.3/python-3.12.3-macos11.pkg" },
105115
{ identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.3/python-3.12.3-macos11.pkg" },
116+
{ identifier = "cp313-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0b1-macos11.pkg" },
117+
{ identifier = "cp313-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0b1-macos11.pkg" },
118+
{ identifier = "cp313-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0b1-macos11.pkg" },
106119
{ identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-osx64.tar.bz2" },
107120
{ identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_x86_64.tar.bz2" },
108121
{ identifier = "pp38-macosx_arm64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_arm64.tar.bz2" },
@@ -128,10 +141,13 @@ python_configurations = [
128141
{ identifier = "cp311-win_amd64", version = "3.11.9", arch = "64" },
129142
{ identifier = "cp312-win32", version = "3.12.3", arch = "32" },
130143
{ identifier = "cp312-win_amd64", version = "3.12.3", arch = "64" },
144+
{ identifier = "cp313-win32", version = "3.13.0-b1", arch = "32" },
145+
{ identifier = "cp313-win_amd64", version = "3.13.0-b1", arch = "64" },
131146
{ identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" },
132147
{ identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" },
133148
{ identifier = "cp311-win_arm64", version = "3.11.9", arch = "ARM64" },
134149
{ identifier = "cp312-win_arm64", version = "3.12.3", arch = "ARM64" },
150+
{ identifier = "cp313-win_arm64", version = "3.13.0-b1", arch = "ARM64" },
135151
{ identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" },
136152
{ identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" },
137153
{ identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-win64.zip" },
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# This file was autogenerated by uv via the following command:
2+
# nox -s update_constraints
3+
altgraph==0.17.4
4+
# via macholib
5+
build==1.2.1
6+
delocate==0.11.0
7+
distlib==0.3.8
8+
# via virtualenv
9+
filelock==3.14.0
10+
# via virtualenv
11+
macholib==1.16.3
12+
# via delocate
13+
packaging==24.0
14+
# via
15+
# build
16+
# delocate
17+
pip==24.0
18+
platformdirs==4.2.1
19+
# via virtualenv
20+
pyproject-hooks==1.1.0
21+
# via build
22+
typing-extensions==4.11.0
23+
# via delocate
24+
virtualenv==20.26.1

cibuildwheel/util.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ class BuildSelector:
238238
requires_python: SpecifierSet | None = None
239239

240240
# a pattern that skips prerelease versions, when include_prereleases is False.
241-
PRERELEASE_SKIP: ClassVar[str] = ""
241+
PRERELEASE_SKIP: ClassVar[str] = "cp313-*"
242242
prerelease_pythons: bool = False
243243

244244
def __call__(self, build_id: str) -> bool:

docs/options.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ When setting the options, you can use shell-style globbing syntax, as per [fnmat
296296
| Python 3.10 | cp310-macosx_x86_64<br/>cp310-macosx_universal2<br/>cp310-macosx_arm64 | cp310-win_amd64<br/>cp310-win32<br/>cp310-win_arm64 | cp310-manylinux_x86_64<br/>cp310-manylinux_i686<br/>cp310-musllinux_x86_64<br/>cp310-musllinux_i686 | cp310-manylinux_aarch64<br/>cp310-manylinux_ppc64le<br/>cp310-manylinux_s390x<br/>cp310-musllinux_aarch64<br/>cp310-musllinux_ppc64le<br/>cp310-musllinux_s390x |
297297
| Python 3.11 | cp311-macosx_x86_64<br/>cp311-macosx_universal2<br/>cp311-macosx_arm64 | cp311-win_amd64<br/>cp311-win32<br/>cp311-win_arm64 | cp311-manylinux_x86_64<br/>cp311-manylinux_i686<br/>cp311-musllinux_x86_64<br/>cp311-musllinux_i686 | cp311-manylinux_aarch64<br/>cp311-manylinux_ppc64le<br/>cp311-manylinux_s390x<br/>cp311-musllinux_aarch64<br/>cp311-musllinux_ppc64le<br/>cp311-musllinux_s390x |
298298
| Python 3.12 | cp312-macosx_x86_64<br/>cp312-macosx_universal2<br/>cp312-macosx_arm64 | cp312-win_amd64<br/>cp312-win32<br/>cp312-win_arm64 | cp312-manylinux_x86_64<br/>cp312-manylinux_i686<br/>cp312-musllinux_x86_64<br/>cp312-musllinux_i686 | cp312-manylinux_aarch64<br/>cp312-manylinux_ppc64le<br/>cp312-manylinux_s390x<br/>cp312-musllinux_aarch64<br/>cp312-musllinux_ppc64le<br/>cp312-musllinux_s390x |
299+
| Python 3.13 | cp313-macosx_x86_64<br/>cp313-macosx_universal2<br/>cp313-macosx_arm64 | cp313-win_amd64<br/>cp313-win32<br/>cp313-win_arm64 | cp313-manylinux_x86_64<br/>cp313-manylinux_i686<br/>cp313-musllinux_x86_64<br/>cp313-musllinux_i686 | cp313-manylinux_aarch64<br/>cp313-manylinux_ppc64le<br/>cp313-manylinux_s390x<br/>cp313-musllinux_aarch64<br/>cp313-musllinux_ppc64le<br/>cp313-musllinux_s390x |
299300
| PyPy3.7 v7.3 | pp37-macosx_x86_64 | pp37-win_amd64 | pp37-manylinux_x86_64<br/>pp37-manylinux_i686 | pp37-manylinux_aarch64 |
300301
| PyPy3.8 v7.3 | pp38-macosx_x86_64<br/>pp38-macosx_arm64 | pp38-win_amd64 | pp38-manylinux_x86_64<br/>pp38-manylinux_i686 | pp38-manylinux_aarch64 |
301302
| PyPy3.9 v7.3 | pp39-macosx_x86_64<br/>pp39-macosx_arm64 | pp39-win_amd64 | pp39-manylinux_x86_64<br/>pp39-manylinux_i686 | pp39-manylinux_aarch64 |

noxfile.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def update_constraints(session: nox.Session) -> None:
6868
if getattr(session.virtualenv, "venv_backend", "") != "uv":
6969
session.install("uv>=0.1.23")
7070

71-
for minor_version in range(7, 13):
71+
for minor_version in range(7, 14):
7272
python_version = f"3.{minor_version}"
7373
env = os.environ.copy()
7474
# CUSTOM_COMPILE_COMMAND is a pip-compile option that tells users how to

test/test_manylinuxXXXX_only.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,10 @@ def test(manylinux_image, tmp_path):
8686
add_env["CIBW_SKIP"] = "pp* cp31*"
8787
if manylinux_image in {"manylinux2010"}:
8888
# We don't have a manylinux2010 image for PyPy 3.9+, CPython 3.11+
89-
add_env["CIBW_SKIP"] = "pp39* pp31* cp311* cp312*"
89+
add_env["CIBW_SKIP"] = "pp39* pp31* cp311* cp312* cp313*"
9090
if manylinux_image in {"manylinux_2_24"}:
9191
# We don't have a manylinux_2_24 image for PyPy 3.10+, CPython 3.12+
92-
add_env["CIBW_SKIP"] = "pp31* cp312*"
92+
add_env["CIBW_SKIP"] = "pp31* cp312* cp313*"
9393
if manylinux_image == "manylinux_2_28" and platform.machine() == "x86_64":
9494
# We don't have a manylinux_2_28 image for i686
9595
add_env["CIBW_ARCHS"] = "x86_64"
@@ -116,12 +116,20 @@ def test(manylinux_image, tmp_path):
116116
expected_wheels = [
117117
w
118118
for w in expected_wheels
119-
if "-pp39" not in w and "-pp31" not in w and "-cp311" not in w and "-cp312" not in w
119+
if "-pp39" not in w
120+
and "-pp31" not in w
121+
and "-cp311" not in w
122+
and "-cp312" not in w
123+
and "-cp313" not in w
120124
]
121125

122126
if manylinux_image in {"manylinux_2_24"}:
123127
# remove PyPy 3.10+ & CPython 3.11 and above
124-
expected_wheels = [w for w in expected_wheels if "-pp31" not in w and "-cp312" not in w]
128+
expected_wheels = [
129+
w
130+
for w in expected_wheels
131+
if "-pp31" not in w and "-cp312" not in w and "-cp313" not in w
132+
]
125133

126134
if manylinux_image == "manylinux_2_28" and platform.machine() == "x86_64":
127135
# We don't have a manylinux_2_28 image for i686

test/utils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ def expected_wheels(
171171
"cp310-cp310",
172172
"cp311-cp311",
173173
"cp312-cp312",
174+
"cp313-cp313",
174175
]
175176

176177
if machine_arch in ["x86_64", "AMD64", "x86", "aarch64"]:
@@ -189,6 +190,7 @@ def expected_wheels(
189190
"cp310-cp310",
190191
"cp311-cp311",
191192
"cp312-cp312",
193+
"cp313-cp313",
192194
"pp38-pypy38_pp73",
193195
"pp39-pypy39_pp73",
194196
"pp310-pypy310_pp73",

0 commit comments

Comments
 (0)