From 325b1c37c7f82a16627abfdb3c023e0487f483bd Mon Sep 17 00:00:00 2001 From: Niyas Sait Date: Mon, 15 Nov 2021 13:30:07 +0000 Subject: [PATCH 01/11] add support for building wheels for windows on arm64 --- cibuildwheel/architecture.py | 3 ++- cibuildwheel/logger.py | 1 + cibuildwheel/resources/build-platforms.toml | 1 + cibuildwheel/windows.py | 27 ++++++++++++++++++--- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/cibuildwheel/architecture.py b/cibuildwheel/architecture.py index ec6d144bd..9d39d5533 100644 --- a/cibuildwheel/architecture.py +++ b/cibuildwheel/architecture.py @@ -29,6 +29,7 @@ class Architecture(Enum): # windows archs x86 = "x86" AMD64 = "AMD64" + ARM64 = "ARM64" # Allow this to be sorted def __lt__(self, other: "Architecture") -> bool: @@ -83,7 +84,7 @@ def all_archs(platform: PlatformName) -> "Set[Architecture]": elif platform == "macos": return {Architecture.x86_64, Architecture.arm64, Architecture.universal2} elif platform == "windows": - return {Architecture.x86, Architecture.AMD64} + return {Architecture.x86, Architecture.AMD64, Architecture.ARM64} else: assert_never(platform) diff --git a/cibuildwheel/logger.py b/cibuildwheel/logger.py index 12c4462a3..7f7001b69 100644 --- a/cibuildwheel/logger.py +++ b/cibuildwheel/logger.py @@ -27,6 +27,7 @@ "musllinux_s390x": "manylinux s390x", "win32": "Windows 32bit", "win_amd64": "Windows 64bit", + "win_arm64": "Windows on ARM 64bit", "macosx_x86_64": "macOS x86_64", "macosx_universal2": "macOS Universal 2 - x86_64 and arm64", "macosx_arm64": "macOS arm64 - Apple Silicon", diff --git a/cibuildwheel/resources/build-platforms.toml b/cibuildwheel/resources/build-platforms.toml index 78efd3f8b..74fa27ddc 100644 --- a/cibuildwheel/resources/build-platforms.toml +++ b/cibuildwheel/resources/build-platforms.toml @@ -87,6 +87,7 @@ python_configurations = [ { identifier = "cp39-win_amd64", version = "3.9.8", arch = "64" }, { identifier = "cp310-win32", version = "3.10.0", arch = "32" }, { identifier = "cp310-win_amd64", version = "3.10.0", arch = "64" }, + { identifier = "cp310-win_arm64", version = "3.10.0", arch = "ARM64" }, { identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.7-win64.zip" }, { identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.7-win64.zip" }, ] diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py index 2552a9612..cce5f303f 100644 --- a/cibuildwheel/windows.py +++ b/cibuildwheel/windows.py @@ -6,6 +6,7 @@ from pathlib import Path from typing import Dict, List, NamedTuple, Optional, Sequence, Set from zipfile import ZipFile +from packaging.version import Version from .architecture import Architecture from .environment import ParsedEnvironment @@ -43,13 +44,14 @@ def shell( def get_nuget_args(version: str, arch: str) -> List[str]: - python_name = "python" - if arch == "32": - python_name += "x86" + platform_suffix = {'32': 'x86', '64':'', 'ARM64': 'arm64'} + python_name = "python" + platform_suffix[arch] return [ python_name, "-Version", version, + "-Source", + "nuget.org", "-FallbackSource", "https://api.nuget.org/v3/index.json", "-OutputDirectory", @@ -76,6 +78,7 @@ def get_python_configurations( map_arch = { "32": Architecture.x86, "64": Architecture.AMD64, + "ARM64": Architecture.ARM64 } # skip builds as required @@ -189,10 +192,28 @@ def setup_python( # Install pip requires_reinstall = not (installation_path / "Scripts" / "pip.exe").exists() + if requires_reinstall: # maybe pip isn't installed at all. ensurepip resolves that. call(["python", "-m", "ensurepip"], env=env, cwd=CIBW_INSTALL_PATH) + # pip bundled with python 3.10 for arm64 lacks windows launcher and requires an extra pip force-reinstall to get pip executable + if python_configuration.arch == 'ARM64' and Version(get_pip_version(env)) < Version("21.3"): + call( + [ + "python", + "-m", + "pip", + "install", + "--force-reinstall", + "--upgrade", + "pip", + *dependency_constraint_flags, + ], + env=env, + cwd=CIBW_INSTALL_PATH, + ) + # upgrade pip to the version matching our constraints # if necessary, reinstall it to ensure that it's available on PATH as 'pip.exe' call( From e8898c0b1a857b24c0313826e39fdf523838bb5c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 15 Nov 2021 13:33:02 +0000 Subject: [PATCH 02/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- cibuildwheel/windows.py | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py index cce5f303f..727c50764 100644 --- a/cibuildwheel/windows.py +++ b/cibuildwheel/windows.py @@ -6,6 +6,7 @@ from pathlib import Path from typing import Dict, List, NamedTuple, Optional, Sequence, Set from zipfile import ZipFile + from packaging.version import Version from .architecture import Architecture @@ -44,7 +45,7 @@ def shell( def get_nuget_args(version: str, arch: str) -> List[str]: - platform_suffix = {'32': 'x86', '64':'', 'ARM64': 'arm64'} + platform_suffix = {"32": "x86", "64": "", "ARM64": "arm64"} python_name = "python" + platform_suffix[arch] return [ python_name, @@ -75,11 +76,7 @@ def get_python_configurations( python_configurations = [PythonConfiguration(**item) for item in full_python_configs] - map_arch = { - "32": Architecture.x86, - "64": Architecture.AMD64, - "ARM64": Architecture.ARM64 - } + map_arch = {"32": Architecture.x86, "64": Architecture.AMD64, "ARM64": Architecture.ARM64} # skip builds as required python_configurations = [ @@ -198,21 +195,21 @@ def setup_python( call(["python", "-m", "ensurepip"], env=env, cwd=CIBW_INSTALL_PATH) # pip bundled with python 3.10 for arm64 lacks windows launcher and requires an extra pip force-reinstall to get pip executable - if python_configuration.arch == 'ARM64' and Version(get_pip_version(env)) < Version("21.3"): + if python_configuration.arch == "ARM64" and Version(get_pip_version(env)) < Version("21.3"): call( - [ - "python", - "-m", - "pip", - "install", - "--force-reinstall", - "--upgrade", - "pip", - *dependency_constraint_flags, - ], - env=env, - cwd=CIBW_INSTALL_PATH, - ) + [ + "python", + "-m", + "pip", + "install", + "--force-reinstall", + "--upgrade", + "pip", + *dependency_constraint_flags, + ], + env=env, + cwd=CIBW_INSTALL_PATH, + ) # upgrade pip to the version matching our constraints # if necessary, reinstall it to ensure that it's available on PATH as 'pip.exe' From cfeba93a3e190c4008fb2892398be0bf65ad2fe8 Mon Sep 17 00:00:00 2001 From: Niyas Sait Date: Mon, 15 Nov 2021 14:19:12 +0000 Subject: [PATCH 03/11] Fix main_platform_test.py --- unit_test/main_tests/main_platform_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unit_test/main_tests/main_platform_test.py b/unit_test/main_tests/main_platform_test.py index ae676791c..dd32cf5e2 100644 --- a/unit_test/main_tests/main_platform_test.py +++ b/unit_test/main_tests/main_platform_test.py @@ -178,7 +178,7 @@ def test_archs_platform_all(platform, intercepted_build_args, monkeypatch): Architecture.s390x, } elif platform == "windows": - assert options.globals.architectures == {Architecture.x86, Architecture.AMD64} + assert options.globals.architectures == {Architecture.x86, Architecture.AMD64, Architecture.ARM64} elif platform == "macos": assert options.globals.architectures == { Architecture.x86_64, From c91d15878afb9cd86d698028e3ef2a05d207d627 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 15 Nov 2021 14:20:57 +0000 Subject: [PATCH 04/11] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- unit_test/main_tests/main_platform_test.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/unit_test/main_tests/main_platform_test.py b/unit_test/main_tests/main_platform_test.py index dd32cf5e2..09f5b9db2 100644 --- a/unit_test/main_tests/main_platform_test.py +++ b/unit_test/main_tests/main_platform_test.py @@ -178,7 +178,11 @@ def test_archs_platform_all(platform, intercepted_build_args, monkeypatch): Architecture.s390x, } elif platform == "windows": - assert options.globals.architectures == {Architecture.x86, Architecture.AMD64, Architecture.ARM64} + assert options.globals.architectures == { + Architecture.x86, + Architecture.AMD64, + Architecture.ARM64, + } elif platform == "macos": assert options.globals.architectures == { Architecture.x86_64, From 9bf6b0ae3b47c1c1d258a0810c0630249f1e5006 Mon Sep 17 00:00:00 2001 From: Niyas Sait Date: Mon, 15 Nov 2021 17:39:04 +0000 Subject: [PATCH 05/11] Remove unrequired explicit nuget source --- cibuildwheel/windows.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py index 727c50764..e69f49c29 100644 --- a/cibuildwheel/windows.py +++ b/cibuildwheel/windows.py @@ -51,8 +51,6 @@ def get_nuget_args(version: str, arch: str) -> List[str]: python_name, "-Version", version, - "-Source", - "nuget.org", "-FallbackSource", "https://api.nuget.org/v3/index.json", "-OutputDirectory", From dfae980933d9dc910ad029e3850e6b1f94511187 Mon Sep 17 00:00:00 2001 From: Niyas Sait Date: Wed, 17 Nov 2021 11:12:54 +0000 Subject: [PATCH 06/11] add python arm64 3.9.9 version --- cibuildwheel/resources/build-platforms.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/cibuildwheel/resources/build-platforms.toml b/cibuildwheel/resources/build-platforms.toml index 74fa27ddc..c46cb80cd 100644 --- a/cibuildwheel/resources/build-platforms.toml +++ b/cibuildwheel/resources/build-platforms.toml @@ -87,6 +87,7 @@ python_configurations = [ { identifier = "cp39-win_amd64", version = "3.9.8", arch = "64" }, { identifier = "cp310-win32", version = "3.10.0", arch = "32" }, { identifier = "cp310-win_amd64", version = "3.10.0", arch = "64" }, + { identifier = "cp310-win_arm64", version = "3.9.9", arch = "ARM64" }, { identifier = "cp310-win_arm64", version = "3.10.0", arch = "ARM64" }, { identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.7-win64.zip" }, { identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.7-win64.zip" }, From aaf23c99e0a2d1636d31152a4709f27fb6a4b35b Mon Sep 17 00:00:00 2001 From: Niyas Sait Date: Wed, 17 Nov 2021 11:13:22 +0000 Subject: [PATCH 07/11] extend update_pythons.py to add win/arm64 support --- bin/update_pythons.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bin/update_pythons.py b/bin/update_pythons.py index 488ccbc1a..791de59be 100755 --- a/bin/update_pythons.py +++ b/bin/update_pythons.py @@ -68,8 +68,8 @@ def __init__(self, arch_str: ArchStr) -> None: if resource["@type"] == "PackageBaseAddress/3.0.0": endpoint = resource["@id"] - ARCH_DICT = {"32": "win32", "64": "win_amd64"} - PACKAGE_DICT = {"32": "pythonx86", "64": "python"} + ARCH_DICT = {"32": "win32", "64": "win_amd64", "ARM64": "win_arm64"} + PACKAGE_DICT = {"32": "pythonx86", "64": "python", "ARM64": "pythonarm64"} self.arch_str = arch_str self.arch = ARCH_DICT[arch_str] @@ -237,6 +237,7 @@ class AllVersions: def __init__(self) -> None: self.windows_32 = WindowsVersions("32") self.windows_64 = WindowsVersions("64") + self.windows_arm64 = WindowsVersions("ARM64") self.windows_pypy_64 = PyPyVersions("64") self.macos_cpython = CPythonVersions() @@ -264,6 +265,9 @@ def update_config(self, config: dict[str, str]) -> None: config_update = self.windows_64.update_version_windows(spec) elif identifier.startswith("pp"): config_update = self.windows_pypy_64.update_version_windows(spec) + elif "win_arm64" in identifier: + if identifier.startswith("cp"): + config_update = self.windows_arm64.update_version_windows(spec) assert config_update is not None, f"{identifier} not found!" config.update(**config_update) From dffac66730dddae390b6dfd3acf2dc3f8c2266d1 Mon Sep 17 00:00:00 2001 From: Niyas Sait Date: Wed, 17 Nov 2021 11:41:53 +0000 Subject: [PATCH 08/11] update documentation for new win/arm64 platform --- README.md | 15 ++++++++------- docs/options.md | 6 ++++-- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 9dffb47dd..7e55b4433 100644 --- a/README.md +++ b/README.md @@ -22,16 +22,17 @@ Python wheels are great. Building them across **Mac, Linux, Windows**, on **mult What does it do? ---------------- -| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | manylinux
musllinux x86_64 | manylinux
musllinux i686 | manylinux
musllinux aarch64 | manylinux
musllinux ppc64le | manylinux
musllinux s390x | +| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | Windows Arm64 | manylinux
musllinux x86_64 | manylinux
musllinux i686 | manylinux
musllinux aarch64 | manylinux
musllinux ppc64le | manylinux
musllinux s390x | |---------------|----|-----|-----|-----|----|-----|----|-----|-----| -| CPython 3.6 | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| CPython 3.7 | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| CPython 3.8 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| CPython 3.10 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| PyPy 3.7 v7.3 | ✅ | N/A | ✅ | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | +| CPython 3.6 | ✅ | N/A | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | +| CPython 3.7 | ✅ | N/A | ✅ | ✅ | N/A | ✅ |✅ | ✅ | ✅ | ✅ | +| CPython 3.8 | ✅ | ✅ | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | +| CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | +| CPython 3.10 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | +| PyPy 3.7 v7.3 | ✅ | N/A | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | ¹ PyPy is only supported for manylinux wheels.
+² Windows arm64 support is experimental.
- Builds manylinux, musllinux, macOS 10.9+, and Windows wheels for CPython and PyPy - Works on GitHub Actions, Azure Pipelines, Travis CI, AppVeyor, CircleCI, and GitLab CI diff --git a/docs/options.md b/docs/options.md index 53ff1c4f5..58bf143b1 100644 --- a/docs/options.md +++ b/docs/options.md @@ -206,8 +206,8 @@ When setting the options, you can use shell-style globbing syntax, as per [fnmat | Python 3.6 | cp36-macosx_x86_64 | cp36-win_amd64
cp36-win32 | cp36-manylinux_x86_64
cp36-manylinux_i686
cp36-musllinux_x86_64
cp36-musllinux_i686 | cp36-manylinux_aarch64
cp36-manylinux_ppc64le
cp36-manylinux_s390x
cp36-musllinux_aarch64
cp36-musllinux_ppc64le
cp36-musllinux_s390x | | Python 3.7 | cp37-macosx_x86_64 | cp37-win_amd64
cp37-win32 | cp37-manylinux_x86_64
cp37-manylinux_i686
cp37-musllinux_x86_64
cp37-musllinux_i686 | cp37-manylinux_aarch64
cp37-manylinux_ppc64le
cp37-manylinux_s390x
cp37-musllinux_aarch64
cp37-musllinux_ppc64le
cp37-musllinux_s390x | | Python 3.8 | cp38-macosx_x86_64
cp38-macosx_universal2
cp38-macosx_arm64 | cp38-win_amd64
cp38-win32 | cp38-manylinux_x86_64
cp38-manylinux_i686
cp38-musllinux_x86_64
cp38-musllinux_i686 | cp38-manylinux_aarch64
cp38-manylinux_ppc64le
cp38-manylinux_s390x
cp38-musllinux_aarch64
cp38-musllinux_ppc64le
cp38-musllinux_s390x | -| Python 3.9 | cp39-macosx_x86_64
cp39-macosx_universal2
cp39-macosx_arm64 | cp39-win_amd64
cp39-win32 | 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-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.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 | | 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-win_amd64 | pp38-manylinux_x86_64
pp38-manylinux_i686 | pp38-manylinux_aarch64 | @@ -216,6 +216,8 @@ The format is `python_tag-platform_tag`, with tags similar to those in [PEP 425] For CPython, the minimally supported macOS version is 10.9; for PyPy 3.7, macOS 10.13 or higher is required. +Windows arm64 platform support is experimental. + See the [cibuildwheel 1 documentation](https://cibuildwheel.readthedocs.io/en/1.x/) for past end of life versions of Python, and PyPy2.7. #### Examples From 4cc5fb0c09f1b4ef72b0efde831906e1e30efd45 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Wed, 17 Nov 2021 09:39:07 -0500 Subject: [PATCH 09/11] style: include ARM64 in literal --- bin/update_pythons.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/update_pythons.py b/bin/update_pythons.py index 791de59be..30859259a 100755 --- a/bin/update_pythons.py +++ b/bin/update_pythons.py @@ -28,7 +28,7 @@ RESOURCES_DIR: Final[Path] = DIR / "cibuildwheel/resources" -ArchStr = Literal["32", "64"] +ArchStr = Literal["32", "64", "ARM64"] class ConfigWinCP(TypedDict): From 19e11ffa65c000053e1287a0f8bf552222280a35 Mon Sep 17 00:00:00 2001 From: Niyas Sait Date: Mon, 22 Nov 2021 06:54:49 +0000 Subject: [PATCH 10/11] Fix python 3.9 identifier for win_arm64 --- cibuildwheel/resources/build-platforms.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cibuildwheel/resources/build-platforms.toml b/cibuildwheel/resources/build-platforms.toml index c46cb80cd..c95720293 100644 --- a/cibuildwheel/resources/build-platforms.toml +++ b/cibuildwheel/resources/build-platforms.toml @@ -87,7 +87,7 @@ python_configurations = [ { identifier = "cp39-win_amd64", version = "3.9.8", arch = "64" }, { identifier = "cp310-win32", version = "3.10.0", arch = "32" }, { identifier = "cp310-win_amd64", version = "3.10.0", arch = "64" }, - { identifier = "cp310-win_arm64", version = "3.9.9", arch = "ARM64" }, + { identifier = "cp39-win_arm64", version = "3.9.9", arch = "ARM64" }, { identifier = "cp310-win_arm64", version = "3.10.0", arch = "ARM64" }, { identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.7-win64.zip" }, { identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.7-win64.zip" }, From 05becce073fa94b74ea4311b3ff264324e44f5e4 Mon Sep 17 00:00:00 2001 From: Niyas Sait Date: Tue, 23 Nov 2021 17:49:44 +0000 Subject: [PATCH 11/11] Fix table layout issues in README and add note about arm64 pip issue --- README.md | 2 +- cibuildwheel/windows.py | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7e55b4433..7cfce121e 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ What does it do? ---------------- | | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | Windows Arm64 | manylinux
musllinux x86_64 | manylinux
musllinux i686 | manylinux
musllinux aarch64 | manylinux
musllinux ppc64le | manylinux
musllinux s390x | -|---------------|----|-----|-----|-----|----|-----|----|-----|-----| +|---------------|----|-----|-----|-----|-----|----|-----|----|-----|-----| | CPython 3.6 | ✅ | N/A | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | | CPython 3.7 | ✅ | N/A | ✅ | ✅ | N/A | ✅ |✅ | ✅ | ✅ | ✅ | | CPython 3.8 | ✅ | ✅ | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | diff --git a/cibuildwheel/windows.py b/cibuildwheel/windows.py index e69f49c29..77c41cd62 100644 --- a/cibuildwheel/windows.py +++ b/cibuildwheel/windows.py @@ -192,7 +192,12 @@ def setup_python( # maybe pip isn't installed at all. ensurepip resolves that. call(["python", "-m", "ensurepip"], env=env, cwd=CIBW_INSTALL_PATH) - # pip bundled with python 3.10 for arm64 lacks windows launcher and requires an extra pip force-reinstall to get pip executable + # pip older than 21.3 builds executables such as pip.exe for x64 platform. + # The first re-install of pip updates pip module but builds pip.exe using + # the old pip which still generates x64 executable. But the second + # re-install uses updated pip and correctly builds pip.exe for the target. + # This can be removed once ARM64 Pythons (currently 3.9 and 3.10) bundle + # pip versions newer than 21.3. if python_configuration.arch == "ARM64" and Version(get_pip_version(env)) < Version("21.3"): call( [