diff --git a/.github/workflows/update-dependencies.yml b/.github/workflows/update-dependencies.yml index db5510269..7ae7b9b9b 100644 --- a/.github/workflows/update-dependencies.yml +++ b/.github/workflows/update-dependencies.yml @@ -24,7 +24,7 @@ jobs: - uses: wntrblm/nox@2023.04.22 with: - python-versions: "3.7, 3.8, 3.9, 3.10, 3.11" + python-versions: "3.7, 3.8, 3.9, 3.10, 3.11, 3.12-dev" - name: "Run update: dependencies" run: nox --force-color -s update_constraints diff --git a/README.md b/README.md index cec9e9734..2b0050dca 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ What does it do? | CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅³ | ✅ | ✅ | ✅ | ✅ | | CPython 3.10 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | | CPython 3.11 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | +| CPython 3.12⁵ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | | PyPy 3.7 v7.3 | ✅ | N/A | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | | PyPy 3.8 v7.3 | ✅ | ✅⁴ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | | PyPy 3.9 v7.3 | ✅ | ✅⁴ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | @@ -39,6 +40,7 @@ What does it do? ² Windows arm64 support is experimental.
³ Alpine 3.14 and very briefly 3.15's default python3 [was not able to load](/~https://github.com/pypa/cibuildwheel/issues/934) musllinux wheels. This has been fixed; please upgrade the python package if using Alpine from before the fix.
⁴ Cross-compilation not supported with PyPy - to build these wheels you need to run cibuildwheel on an Apple Silicon machine.
+⁵ CPython 3.12 is available using the [CIBW_PRERELEASE_PYTHONS](https://cibuildwheel.readthedocs.io/en/stable/options/#prerelease-pythons) option.
- Builds manylinux, musllinux, macOS 10.9+, and Windows wheels for CPython and PyPy - Works on GitHub Actions, Azure Pipelines, Travis CI, AppVeyor, CircleCI, GitLab CI, and Cirrus CI diff --git a/cibuildwheel/resources/build-platforms.toml b/cibuildwheel/resources/build-platforms.toml index 776606341..ca5e251b9 100644 --- a/cibuildwheel/resources/build-platforms.toml +++ b/cibuildwheel/resources/build-platforms.toml @@ -6,12 +6,14 @@ python_configurations = [ { identifier = "cp39-manylinux_x86_64", version = "3.9", path_str = "/opt/python/cp39-cp39" }, { identifier = "cp310-manylinux_x86_64", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-manylinux_x86_64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, + { identifier = "cp312-manylinux_x86_64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp36-manylinux_i686", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-manylinux_i686", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-manylinux_i686", version = "3.8", path_str = "/opt/python/cp38-cp38" }, { identifier = "cp39-manylinux_i686", version = "3.9", path_str = "/opt/python/cp39-cp39" }, { identifier = "cp310-manylinux_i686", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-manylinux_i686", version = "3.11", path_str = "/opt/python/cp311-cp311" }, + { identifier = "cp312-manylinux_i686", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "pp37-manylinux_x86_64", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" }, { identifier = "pp38-manylinux_x86_64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" }, { identifier = "pp39-manylinux_x86_64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" }, @@ -21,18 +23,21 @@ python_configurations = [ { identifier = "cp39-manylinux_aarch64", version = "3.9", path_str = "/opt/python/cp39-cp39" }, { identifier = "cp310-manylinux_aarch64", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-manylinux_aarch64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, + { identifier = "cp312-manylinux_aarch64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp36-manylinux_ppc64le", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-manylinux_ppc64le", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-manylinux_ppc64le", version = "3.8", path_str = "/opt/python/cp38-cp38" }, { identifier = "cp39-manylinux_ppc64le", version = "3.9", path_str = "/opt/python/cp39-cp39" }, { identifier = "cp310-manylinux_ppc64le", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-manylinux_ppc64le", version = "3.11", path_str = "/opt/python/cp311-cp311" }, + { identifier = "cp312-manylinux_ppc64le", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp36-manylinux_s390x", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-manylinux_s390x", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-manylinux_s390x", version = "3.8", path_str = "/opt/python/cp38-cp38" }, { identifier = "cp39-manylinux_s390x", version = "3.9", path_str = "/opt/python/cp39-cp39" }, { identifier = "cp310-manylinux_s390x", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-manylinux_s390x", version = "3.11", path_str = "/opt/python/cp311-cp311" }, + { identifier = "cp312-manylinux_s390x", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "pp37-manylinux_aarch64", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" }, { identifier = "pp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" }, { identifier = "pp39-manylinux_aarch64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" }, @@ -45,30 +50,35 @@ python_configurations = [ { identifier = "cp39-musllinux_x86_64", version = "3.9", path_str = "/opt/python/cp39-cp39" }, { identifier = "cp310-musllinux_x86_64", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-musllinux_x86_64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, + { identifier = "cp312-musllinux_x86_64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp36-musllinux_i686", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_i686", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_i686", version = "3.8", path_str = "/opt/python/cp38-cp38" }, { identifier = "cp39-musllinux_i686", version = "3.9", path_str = "/opt/python/cp39-cp39" }, { identifier = "cp310-musllinux_i686", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-musllinux_i686", version = "3.11", path_str = "/opt/python/cp311-cp311" }, + { identifier = "cp312-musllinux_i686", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp36-musllinux_aarch64", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_aarch64", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_aarch64", version = "3.8", path_str = "/opt/python/cp38-cp38" }, { identifier = "cp39-musllinux_aarch64", version = "3.9", path_str = "/opt/python/cp39-cp39" }, { identifier = "cp310-musllinux_aarch64", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-musllinux_aarch64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, + { identifier = "cp312-musllinux_aarch64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp36-musllinux_ppc64le", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_ppc64le", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_ppc64le", version = "3.8", path_str = "/opt/python/cp38-cp38" }, { identifier = "cp39-musllinux_ppc64le", version = "3.9", path_str = "/opt/python/cp39-cp39" }, { identifier = "cp310-musllinux_ppc64le", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-musllinux_ppc64le", version = "3.11", path_str = "/opt/python/cp311-cp311" }, + { identifier = "cp312-musllinux_ppc64le", version = "3.12", path_str = "/opt/python/cp312-cp312" }, { identifier = "cp36-musllinux_s390x", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_s390x", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_s390x", version = "3.8", path_str = "/opt/python/cp38-cp38" }, { identifier = "cp39-musllinux_s390x", version = "3.9", path_str = "/opt/python/cp39-cp39" }, { identifier = "cp310-musllinux_s390x", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-musllinux_s390x", version = "3.11", path_str = "/opt/python/cp311-cp311" }, + { identifier = "cp312-musllinux_s390x", version = "3.12", path_str = "/opt/python/cp312-cp312" }, ] [macos] @@ -87,6 +97,9 @@ python_configurations = [ { identifier = "cp311-macosx_x86_64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.3/python-3.11.3-macos11.pkg" }, { identifier = "cp311-macosx_arm64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.3/python-3.11.3-macos11.pkg" }, { identifier = "cp311-macosx_universal2", version = "3.11", url = "https://www.python.org/ftp/python/3.11.3/python-3.11.3-macos11.pkg" }, + { identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.0/python-3.12.0b1-macos11.pkg" }, + { identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.0/python-3.12.0b1-macos11.pkg" }, + { identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.0/python-3.12.0b1-macos11.pkg" }, { identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-osx64.tar.bz2" }, { 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" }, @@ -108,9 +121,12 @@ python_configurations = [ { identifier = "cp310-win_amd64", version = "3.10.11", arch = "64" }, { identifier = "cp311-win32", version = "3.11.3", arch = "32" }, { identifier = "cp311-win_amd64", version = "3.11.3", arch = "64" }, + { identifier = "cp312-win32", version = "3.12.0-b1", arch = "32" }, + { identifier = "cp312-win_amd64", version = "3.12.0-b1", 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.3", arch = "ARM64" }, + { identifier = "cp312-win_arm64", version = "3.12.0-b1", arch = "ARM64" }, { identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" }, { 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.11-win64.zip" }, diff --git a/cibuildwheel/resources/constraints-python310.txt b/cibuildwheel/resources/constraints-python310.txt index 4308bac8d..8c9754a1e 100644 --- a/cibuildwheel/resources/constraints-python310.txt +++ b/cibuildwheel/resources/constraints-python310.txt @@ -14,7 +14,7 @@ packaging==23.1 # via delocate platformdirs==3.5.1 # via virtualenv -typing-extensions==4.5.0 +typing-extensions==4.6.2 # via delocate virtualenv==20.23.0 # via -r cibuildwheel/resources/constraints.in @@ -24,5 +24,5 @@ wheel==0.40.0 # The following packages are considered to be unsafe in a requirements file: pip==23.1.2 # via -r cibuildwheel/resources/constraints.in -setuptools==67.7.2 +setuptools==67.8.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python311.txt b/cibuildwheel/resources/constraints-python311.txt index 64f9c1882..defbaa8e0 100644 --- a/cibuildwheel/resources/constraints-python311.txt +++ b/cibuildwheel/resources/constraints-python311.txt @@ -14,7 +14,7 @@ packaging==23.1 # via delocate platformdirs==3.5.1 # via virtualenv -typing-extensions==4.5.0 +typing-extensions==4.6.2 # via delocate virtualenv==20.23.0 # via -r cibuildwheel/resources/constraints.in @@ -24,5 +24,5 @@ wheel==0.40.0 # The following packages are considered to be unsafe in a requirements file: pip==23.1.2 # via -r cibuildwheel/resources/constraints.in -setuptools==67.7.2 +setuptools==67.8.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python312.txt b/cibuildwheel/resources/constraints-python312.txt new file mode 100644 index 000000000..ee298f290 --- /dev/null +++ b/cibuildwheel/resources/constraints-python312.txt @@ -0,0 +1,28 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# nox -s update_constraints-3.12 +# +delocate==0.10.4 + # via -r cibuildwheel/resources/constraints.in +distlib==0.3.6 + # via virtualenv +filelock==3.12.0 + # via virtualenv +packaging==23.1 + # via delocate +platformdirs==3.5.1 + # via virtualenv +typing-extensions==4.6.2 + # via delocate +virtualenv==20.23.0 + # via -r cibuildwheel/resources/constraints.in +wheel==0.40.0 + # via -r cibuildwheel/resources/constraints.in + +# The following packages are considered to be unsafe in a requirements file: +pip==23.1.2 + # via -r cibuildwheel/resources/constraints.in +setuptools==67.8.0 + # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python37.txt b/cibuildwheel/resources/constraints-python37.txt index 57950e954..f0c9f544b 100644 --- a/cibuildwheel/resources/constraints-python37.txt +++ b/cibuildwheel/resources/constraints-python37.txt @@ -16,7 +16,7 @@ packaging==23.1 # via delocate platformdirs==3.5.1 # via virtualenv -typing-extensions==4.5.0 +typing-extensions==4.6.2 # via # delocate # importlib-metadata @@ -31,5 +31,5 @@ zipp==3.15.0 # The following packages are considered to be unsafe in a requirements file: pip==23.1.2 # via -r cibuildwheel/resources/constraints.in -setuptools==67.7.2 +setuptools==67.8.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python38.txt b/cibuildwheel/resources/constraints-python38.txt index 1f9a70fe4..57d163755 100644 --- a/cibuildwheel/resources/constraints-python38.txt +++ b/cibuildwheel/resources/constraints-python38.txt @@ -14,7 +14,7 @@ packaging==23.1 # via delocate platformdirs==3.5.1 # via virtualenv -typing-extensions==4.5.0 +typing-extensions==4.6.2 # via delocate virtualenv==20.23.0 # via -r cibuildwheel/resources/constraints.in @@ -24,5 +24,5 @@ wheel==0.40.0 # The following packages are considered to be unsafe in a requirements file: pip==23.1.2 # via -r cibuildwheel/resources/constraints.in -setuptools==67.7.2 +setuptools==67.8.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints-python39.txt b/cibuildwheel/resources/constraints-python39.txt index df10555b2..561742665 100644 --- a/cibuildwheel/resources/constraints-python39.txt +++ b/cibuildwheel/resources/constraints-python39.txt @@ -14,7 +14,7 @@ packaging==23.1 # via delocate platformdirs==3.5.1 # via virtualenv -typing-extensions==4.5.0 +typing-extensions==4.6.2 # via delocate virtualenv==20.23.0 # via -r cibuildwheel/resources/constraints.in @@ -24,5 +24,5 @@ wheel==0.40.0 # The following packages are considered to be unsafe in a requirements file: pip==23.1.2 # via -r cibuildwheel/resources/constraints.in -setuptools==67.7.2 +setuptools==67.8.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/constraints.txt b/cibuildwheel/resources/constraints.txt index 64f9c1882..ee298f290 100644 --- a/cibuildwheel/resources/constraints.txt +++ b/cibuildwheel/resources/constraints.txt @@ -1,8 +1,8 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# nox -s update_constraints-3.11 +# nox -s update_constraints-3.12 # delocate==0.10.4 # via -r cibuildwheel/resources/constraints.in @@ -14,7 +14,7 @@ packaging==23.1 # via delocate platformdirs==3.5.1 # via virtualenv -typing-extensions==4.5.0 +typing-extensions==4.6.2 # via delocate virtualenv==20.23.0 # via -r cibuildwheel/resources/constraints.in @@ -24,5 +24,5 @@ wheel==0.40.0 # The following packages are considered to be unsafe in a requirements file: pip==23.1.2 # via -r cibuildwheel/resources/constraints.in -setuptools==67.7.2 +setuptools==67.8.0 # via -r cibuildwheel/resources/constraints.in diff --git a/cibuildwheel/resources/pinned_docker_images.cfg b/cibuildwheel/resources/pinned_docker_images.cfg index d36239948..a29dd5aee 100644 --- a/cibuildwheel/resources/pinned_docker_images.cfg +++ b/cibuildwheel/resources/pinned_docker_images.cfg @@ -1,49 +1,49 @@ [x86_64] manylinux1 = quay.io/pypa/manylinux1_x86_64:2023-05-01-496eb35 manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2023-04-30-c9c30dc +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2023-05-24-3bf828e manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2023-04-30-c9c30dc -musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2023-04-30-c9c30dc +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2023-05-24-3bf828e +musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2023-05-24-3bf828e [i686] manylinux1 = quay.io/pypa/manylinux1_i686:2023-05-01-496eb35 manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2023-04-30-c9c30dc +manylinux2014 = quay.io/pypa/manylinux2014_i686:2023-05-24-3bf828e manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 -musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2023-04-30-c9c30dc +musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2023-05-24-3bf828e [pypy_x86_64] manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2023-04-30-c9c30dc +manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2023-05-24-3bf828e manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2023-04-30-c9c30dc +manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2023-05-24-3bf828e [pypy_i686] manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 -manylinux2014 = quay.io/pypa/manylinux2014_i686:2023-04-30-c9c30dc +manylinux2014 = quay.io/pypa/manylinux2014_i686:2023-05-24-3bf828e manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 [aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2023-04-30-c9c30dc +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2023-05-24-3bf828e manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2023-04-30-c9c30dc -musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2023-04-30-c9c30dc +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2023-05-24-3bf828e +musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2023-05-24-3bf828e [ppc64le] -manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2023-04-30-c9c30dc +manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2023-05-24-3bf828e manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2023-04-30-c9c30dc -musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2023-04-30-c9c30dc +manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2023-05-24-3bf828e +musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2023-05-24-3bf828e [s390x] -manylinux2014 = quay.io/pypa/manylinux2014_s390x:2023-04-30-c9c30dc +manylinux2014 = quay.io/pypa/manylinux2014_s390x:2023-05-24-3bf828e manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2023-04-30-c9c30dc -musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2023-04-30-c9c30dc +manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2023-05-24-3bf828e +musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2023-05-24-3bf828e [pypy_aarch64] -manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2023-04-30-c9c30dc +manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2023-05-24-3bf828e manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 -manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2023-04-30-c9c30dc +manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2023-05-24-3bf828e diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index 79b8bd951..dfc6e65cf 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -252,7 +252,7 @@ class BuildSelector: requires_python: SpecifierSet | None = None # a pattern that skips prerelease versions, when include_prereleases is False. - PRERELEASE_SKIP: ClassVar[str] = "" + PRERELEASE_SKIP: ClassVar[str] = "cp312-*" prerelease_pythons: bool = False def __call__(self, build_id: str) -> bool: diff --git a/docs/options.md b/docs/options.md index e7872bb12..e5f9fe0f9 100644 --- a/docs/options.md +++ b/docs/options.md @@ -226,6 +226,7 @@ When setting the options, you can use shell-style globbing syntax, as per [fnmat | Python 3.9 | cp39-macosx_x86_64
cp39-macosx_universal2
cp39-macosx_arm64 | cp39-win_amd64
cp39-win32
cp39-win_arm64 | cp39-manylinux_x86_64
cp39-manylinux_i686
cp39-musllinux_x86_64
cp39-musllinux_i686 | cp39-manylinux_aarch64
cp39-manylinux_ppc64le
cp39-manylinux_s390x
cp39-musllinux_aarch64
cp39-musllinux_ppc64le
cp39-musllinux_s390x | | Python 3.10 | cp310-macosx_x86_64
cp310-macosx_universal2
cp310-macosx_arm64 | cp310-win_amd64
cp310-win32
cp310-win_arm64 | cp310-manylinux_x86_64
cp310-manylinux_i686
cp310-musllinux_x86_64
cp310-musllinux_i686 | cp310-manylinux_aarch64
cp310-manylinux_ppc64le
cp310-manylinux_s390x
cp310-musllinux_aarch64
cp310-musllinux_ppc64le
cp310-musllinux_s390x | | Python 3.11 | cp311-macosx_x86_64
cp311-macosx_universal2
cp311-macosx_arm64 | cp311-win_amd64
cp311-win32
cp311-win_arm64 | cp311-manylinux_x86_64
cp311-manylinux_i686
cp311-musllinux_x86_64
cp311-musllinux_i686 | cp311-manylinux_aarch64
cp311-manylinux_ppc64le
cp311-manylinux_s390x
cp311-musllinux_aarch64
cp311-musllinux_ppc64le
cp311-musllinux_s390x | +| Python 3.12 | cp312-macosx_x86_64
cp312-macosx_universal2
cp312-macosx_arm64 | cp312-win_amd64
cp312-win32
cp312-win_arm64 | cp312-manylinux_x86_64
cp312-manylinux_i686
cp312-musllinux_x86_64
cp312-musllinux_i686 | cp312-manylinux_aarch64
cp312-manylinux_ppc64le
cp312-manylinux_s390x
cp312-musllinux_aarch64
cp312-musllinux_ppc64le
cp312-musllinux_s390x | | PyPy3.7 v7.3 | pp37-macosx_x86_64 | pp37-win_amd64 | pp37-manylinux_x86_64
pp37-manylinux_i686 | pp37-manylinux_aarch64 | | PyPy3.8 v7.3 | pp38-macosx_x86_64
pp38-macosx_arm64 | pp38-win_amd64 | pp38-manylinux_x86_64
pp38-manylinux_i686 | pp38-manylinux_aarch64 | | PyPy3.9 v7.3 | pp39-macosx_x86_64
pp39-macosx_arm64 | pp39-win_amd64 | pp39-manylinux_x86_64
pp39-manylinux_i686 | pp39-manylinux_aarch64 | diff --git a/noxfile.py b/noxfile.py index 40c673110..0e66647cd 100644 --- a/noxfile.py +++ b/noxfile.py @@ -9,7 +9,7 @@ nox.options.sessions = ["lint", "pylint", "check_manifest", "tests"] -PYTHON_ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11"] +PYTHON_ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] DIR = Path(__file__).parent.resolve() diff --git a/test/test_abi_variants.py b/test/test_abi_variants.py index 114736553..131b1ee9f 100644 --- a/test/test_abi_variants.py +++ b/test/test_abi_variants.py @@ -47,7 +47,7 @@ def test_abi3(tmp_path): expected_wheels = [ w.replace("cp38-cp38", "cp38-abi3") for w in utils.expected_wheels("spam", "0.1.0") - if "-pp" not in w and "-cp39" not in w and "-cp310" not in w and "-cp311" not in w + if "-pp" not in w and "-cp39" not in w and "-cp31" not in w ] assert set(actual_wheels) == set(expected_wheels) diff --git a/test/test_dependency_versions.py b/test/test_dependency_versions.py index 269952e53..a95a4631d 100644 --- a/test/test_dependency_versions.py +++ b/test/test_dependency_versions.py @@ -120,10 +120,10 @@ def test_dependency_constraints_file(tmp_path, build_frontend_env): project_with_expected_version_checks.generate(project_dir) tool_versions = { - "pip": "20.0.2", - "setuptools": "53.0.0", - "wheel": "0.36.2", - "virtualenv": "20.11.2", + "pip": "23.1.2", + "setuptools": "67.7.2", + "wheel": "0.38.3", + "virtualenv": "20.23.0", } constraints_file = tmp_path / "constraints file.txt" @@ -155,11 +155,12 @@ def test_dependency_constraints_file(tmp_path, build_frontend_env): add_env={ "CIBW_ENVIRONMENT": cibw_environment_option, "CIBW_DEPENDENCY_VERSIONS": str(constraints_file), + "CIBW_SKIP": "cp36-*", **build_frontend_env, }, ) # also check that we got the right wheels - expected_wheels = utils.expected_wheels("spam", "0.1.0") + expected_wheels = [w for w in utils.expected_wheels("spam", "0.1.0") if "-cp36" not in w] assert set(actual_wheels) == set(expected_wheels) diff --git a/test/test_manylinuxXXXX_only.py b/test/test_manylinuxXXXX_only.py index d2e91b1d2..d6309c796 100644 --- a/test/test_manylinuxXXXX_only.py +++ b/test/test_manylinuxXXXX_only.py @@ -84,8 +84,11 @@ def test(manylinux_image, tmp_path): # We don't have a manylinux1 image for PyPy & CPython 3.10 and above add_env["CIBW_SKIP"] = "pp* cp31*" if manylinux_image in {"manylinux2010"}: - # We don't have a manylinux2010 image for PyPy 3.9, CPython 3.11 - add_env["CIBW_SKIP"] = "pp39* cp311*" + # We don't have a manylinux2010 image for PyPy 3.9, CPython 3.11+ + add_env["CIBW_SKIP"] = "pp39* cp311* cp312*" + if manylinux_image in {"manylinux_2_24"}: + # We don't have a manylinux_2_24 image for CPython 3.12+ + add_env["CIBW_SKIP"] = "cp312*" if manylinux_image == "manylinux_2_28" and platform.machine() == "x86_64": # We don't have a manylinux_2_28 image for i686 add_env["CIBW_ARCHS"] = "x86_64" @@ -109,7 +112,15 @@ def test(manylinux_image, tmp_path): if manylinux_image in {"manylinux2010"}: # remove PyPy 3.9 & CPython 3.11 - expected_wheels = [w for w in expected_wheels if "-pp39" not in w and "-cp311" not in w] + expected_wheels = [ + w + for w in expected_wheels + if "-pp39" not in w and "-cp311" not in w and "-cp312" not in w + ] + + if manylinux_image in {"manylinux_2_24"}: + # remove CPython 3.11 and above + expected_wheels = [w for w in expected_wheels if "-cp312" not in w] if manylinux_image == "manylinux_2_28" and platform.machine() == "x86_64": # We don't have a manylinux_2_28 image for i686 diff --git a/test/test_pep518.py b/test/test_pep518.py index 557ead469..c88953ce8 100644 --- a/test/test_pep518.py +++ b/test/test_pep518.py @@ -9,7 +9,7 @@ """ # Will fail if PEP 518 does work import requests - assert requests.__version__ == "2.23.0", "Requests found but wrong version ({0})".format(requests.__version__) + assert requests.__version__ == "2.27.0", "Requests found but wrong version ({0})".format(requests.__version__) # Just making sure environment is still set import os @@ -27,7 +27,7 @@ "setuptools >= 42", "setuptools_scm[toml]>=4.1.2", "wheel", - "requests==2.23.0" + "requests==2.27.0" ] build-backend = "setuptools.build_meta" diff --git a/test/utils.py b/test/utils.py index 0e2b7a7fc..4b3853185 100644 --- a/test/utils.py +++ b/test/utils.py @@ -170,6 +170,7 @@ def expected_wheels( "cp39-cp39", "cp310-cp310", "cp311-cp311", + "cp312-cp312", ] if machine_arch in ["x86_64", "AMD64", "x86", "aarch64"]: @@ -182,6 +183,7 @@ def expected_wheels( "cp39-cp39", "cp310-cp310", "cp311-cp311", + "cp312-cp312", "pp38-pypy38_pp73", "pp39-pypy39_pp73", ] diff --git a/unit_test/build_selector_test.py b/unit_test/build_selector_test.py index 3e544900c..b4c6e96a4 100644 --- a/unit_test/build_selector_test.py +++ b/unit_test/build_selector_test.py @@ -12,6 +12,7 @@ def test_build(): assert build_selector("cp37-manylinux_x86_64") assert build_selector("cp310-manylinux_x86_64") assert build_selector("cp311-manylinux_x86_64") + assert not build_selector("cp312-manylinux_x86_64") assert build_selector("pp36-manylinux_x86_64") assert build_selector("pp37-manylinux_x86_64") assert build_selector("cp36-manylinux_i686") @@ -31,6 +32,7 @@ def test_build(): assert build_selector("cp37-win_amd64") assert build_selector("cp310-win_amd64") assert build_selector("cp311-win_amd64") + assert not build_selector("cp312-win_amd64") assert not build_selector("pp36-win_amd64") assert not build_selector("pp37-win_amd64") @@ -43,9 +45,9 @@ def test_build_filter_pre(): ) assert build_selector("cp37-manylinux_x86_64") - assert build_selector("cp311-manylinux_x86_64") + assert build_selector("cp312-manylinux_x86_64") assert build_selector("cp37-win_amd64") - assert build_selector("cp311-win_amd64") + assert build_selector("cp312-win_amd64") def test_skip():