feat: drop python 3.6 & 3.7 support (#2282)
This commit is contained in:
@@ -26,15 +26,12 @@ While cibuildwheel itself requires a recent Python version to run (we support th
|
||||
|
||||
| | 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 | manylinux<br/>musllinux armv7l | Pyodide |
|
||||
|----------------|----|-----|-----|-----|-----|----|-----|----|-----|-----|---|-----|
|
||||
| CPython 3.6 | ✅ | N/A | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A |
|
||||
| CPython 3.7 | ✅ | N/A | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A |
|
||||
| CPython 3.8 | ✅ | ✅ | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A |
|
||||
| CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A |
|
||||
| CPython 3.10 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A |
|
||||
| CPython 3.11 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A |
|
||||
| CPython 3.12 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | ✅⁴ |
|
||||
| CPython 3.13³ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A |
|
||||
| PyPy 3.7 v7.3 | ✅ | N/A | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A |
|
||||
| PyPy 3.8 v7.3 | ✅ | ✅ | ✅ | 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 |
|
||||
| PyPy 3.10 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A |
|
||||
|
||||
@@ -203,7 +203,7 @@ def build_in_container(
|
||||
log.build_start(config.identifier)
|
||||
build_options = options.build_options(config.identifier)
|
||||
build_frontend = build_options.build_frontend or BuildFrontendConfig("pip")
|
||||
use_uv = build_frontend.name == "build[uv]" and Version(config.version) >= Version("3.8")
|
||||
use_uv = build_frontend.name == "build[uv]"
|
||||
pip = ["uv", "pip"] if use_uv else ["pip"]
|
||||
|
||||
dependency_constraint_flags: list[PathOrStr] = []
|
||||
|
||||
+14
-23
@@ -191,11 +191,6 @@ def install_pypy(tmp: Path, url: str) -> Path:
|
||||
return installation_path / "bin" / "pypy3"
|
||||
|
||||
|
||||
def can_use_uv(python_configuration: PythonConfiguration) -> bool:
|
||||
conditions = (Version(python_configuration.version) >= Version("3.8"),)
|
||||
return all(conditions)
|
||||
|
||||
|
||||
def setup_python(
|
||||
tmp: Path,
|
||||
python_configuration: PythonConfiguration,
|
||||
@@ -203,9 +198,6 @@ def setup_python(
|
||||
environment: ParsedEnvironment,
|
||||
build_frontend: BuildFrontendName,
|
||||
) -> tuple[Path, dict[str, str]]:
|
||||
if build_frontend == "build[uv]" and not can_use_uv(python_configuration):
|
||||
build_frontend = "build"
|
||||
|
||||
uv_path = find_uv()
|
||||
use_uv = build_frontend == "build[uv]"
|
||||
|
||||
@@ -315,20 +307,19 @@ def setup_python(
|
||||
)
|
||||
env["MACOSX_DEPLOYMENT_TARGET"] = default_target
|
||||
|
||||
if python_configuration.version not in {"3.6", "3.7"}:
|
||||
if config_is_arm64:
|
||||
# macOS 11 is the first OS with arm64 support, so the wheels
|
||||
# have that as a minimum.
|
||||
env.setdefault("_PYTHON_HOST_PLATFORM", "macosx-11.0-arm64")
|
||||
env.setdefault("ARCHFLAGS", "-arch arm64")
|
||||
elif config_is_universal2:
|
||||
env.setdefault("_PYTHON_HOST_PLATFORM", "macosx-10.9-universal2")
|
||||
env.setdefault("ARCHFLAGS", "-arch arm64 -arch x86_64")
|
||||
elif python_configuration.identifier.endswith("x86_64"):
|
||||
# even on the macos11.0 Python installer, on the x86_64 side it's
|
||||
# compatible back to 10.9.
|
||||
env.setdefault("_PYTHON_HOST_PLATFORM", "macosx-10.9-x86_64")
|
||||
env.setdefault("ARCHFLAGS", "-arch x86_64")
|
||||
if config_is_arm64:
|
||||
# macOS 11 is the first OS with arm64 support, so the wheels
|
||||
# have that as a minimum.
|
||||
env.setdefault("_PYTHON_HOST_PLATFORM", "macosx-11.0-arm64")
|
||||
env.setdefault("ARCHFLAGS", "-arch arm64")
|
||||
elif config_is_universal2:
|
||||
env.setdefault("_PYTHON_HOST_PLATFORM", "macosx-10.9-universal2")
|
||||
env.setdefault("ARCHFLAGS", "-arch arm64 -arch x86_64")
|
||||
elif python_configuration.identifier.endswith("x86_64"):
|
||||
# even on the macos11.0 Python installer, on the x86_64 side it's
|
||||
# compatible back to 10.9.
|
||||
env.setdefault("_PYTHON_HOST_PLATFORM", "macosx-10.9-x86_64")
|
||||
env.setdefault("ARCHFLAGS", "-arch x86_64")
|
||||
|
||||
building_arm64 = config_is_arm64 or config_is_universal2
|
||||
if building_arm64 and get_macos_version() < (10, 16) and "SDKROOT" not in env:
|
||||
@@ -416,7 +407,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
||||
for config in python_configurations:
|
||||
build_options = options.build_options(config.identifier)
|
||||
build_frontend = build_options.build_frontend or BuildFrontendConfig("pip")
|
||||
use_uv = build_frontend.name == "build[uv]" and can_use_uv(config)
|
||||
use_uv = build_frontend.name == "build[uv]"
|
||||
uv_path = find_uv()
|
||||
if use_uv and uv_path is None:
|
||||
msg = "uv not found"
|
||||
|
||||
@@ -980,7 +980,12 @@ def _get_pinned_container_images() -> Mapping[str, Mapping[str, str]]:
|
||||
|
||||
def deprecated_selectors(name: str, selector: str, *, error: bool = False) -> None:
|
||||
if "p2" in selector or "p35" in selector:
|
||||
msg = f"cibuildwheel 2.x no longer supports Python < 3.6. Please use the 1.x series or update {name}"
|
||||
msg = f"cibuildwheel 3.x no longer supports Python < 3.8. Please use the 1.x series or update {name}"
|
||||
if error:
|
||||
raise errors.DeprecationError(msg)
|
||||
log.warning(msg)
|
||||
if "p36" in selector or "p37" in selector:
|
||||
msg = f"cibuildwheel 3.x no longer supports Python < 3.8. Please use the 2.x series or update {name}"
|
||||
if error:
|
||||
raise errors.DeprecationError(msg)
|
||||
log.warning(msg)
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
[linux]
|
||||
python_configurations = [
|
||||
{ identifier = "cp36-manylinux_x86_64", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
|
||||
{ identifier = "cp37-manylinux_x86_64", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
|
||||
{ identifier = "cp38-manylinux_x86_64", version = "3.8", path_str = "/opt/python/cp38-cp38" },
|
||||
{ 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" },
|
||||
@@ -9,8 +7,6 @@ python_configurations = [
|
||||
{ identifier = "cp312-manylinux_x86_64", version = "3.12", path_str = "/opt/python/cp312-cp312" },
|
||||
{ identifier = "cp313-manylinux_x86_64", version = "3.13", path_str = "/opt/python/cp313-cp313" },
|
||||
{ identifier = "cp313t-manylinux_x86_64", version = "3.13", path_str = "/opt/python/cp313-cp313t" },
|
||||
{ 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" },
|
||||
@@ -18,13 +14,10 @@ python_configurations = [
|
||||
{ identifier = "cp312-manylinux_i686", version = "3.12", path_str = "/opt/python/cp312-cp312" },
|
||||
{ identifier = "cp313-manylinux_i686", version = "3.13", path_str = "/opt/python/cp313-cp313" },
|
||||
{ identifier = "cp313t-manylinux_i686", version = "3.13", path_str = "/opt/python/cp313-cp313t" },
|
||||
{ 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" },
|
||||
{ identifier = "pp310-manylinux_x86_64", version = "3.10", path_str = "/opt/python/pp310-pypy310_pp73" },
|
||||
{ identifier = "pp311-manylinux_x86_64", version = "3.11", path_str = "/opt/python/pp311-pypy311_pp73" },
|
||||
{ identifier = "cp36-manylinux_aarch64", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
|
||||
{ identifier = "cp37-manylinux_aarch64", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
|
||||
{ identifier = "cp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/cp38-cp38" },
|
||||
{ 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" },
|
||||
@@ -32,8 +25,6 @@ python_configurations = [
|
||||
{ identifier = "cp312-manylinux_aarch64", version = "3.12", path_str = "/opt/python/cp312-cp312" },
|
||||
{ identifier = "cp313-manylinux_aarch64", version = "3.13", path_str = "/opt/python/cp313-cp313" },
|
||||
{ identifier = "cp313t-manylinux_aarch64", version = "3.13", path_str = "/opt/python/cp313-cp313t" },
|
||||
{ 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" },
|
||||
@@ -41,8 +32,6 @@ python_configurations = [
|
||||
{ identifier = "cp312-manylinux_ppc64le", version = "3.12", path_str = "/opt/python/cp312-cp312" },
|
||||
{ identifier = "cp313-manylinux_ppc64le", version = "3.13", path_str = "/opt/python/cp313-cp313" },
|
||||
{ identifier = "cp313t-manylinux_ppc64le", version = "3.13", path_str = "/opt/python/cp313-cp313t" },
|
||||
{ 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" },
|
||||
@@ -50,8 +39,6 @@ python_configurations = [
|
||||
{ identifier = "cp312-manylinux_s390x", version = "3.12", path_str = "/opt/python/cp312-cp312" },
|
||||
{ identifier = "cp313-manylinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313" },
|
||||
{ identifier = "cp313t-manylinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313t" },
|
||||
{ identifier = "cp36-manylinux_armv7l", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
|
||||
{ identifier = "cp37-manylinux_armv7l", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
|
||||
{ identifier = "cp38-manylinux_armv7l", version = "3.8", path_str = "/opt/python/cp38-cp38" },
|
||||
{ identifier = "cp39-manylinux_armv7l", version = "3.9", path_str = "/opt/python/cp39-cp39" },
|
||||
{ identifier = "cp310-manylinux_armv7l", version = "3.10", path_str = "/opt/python/cp310-cp310" },
|
||||
@@ -59,18 +46,14 @@ python_configurations = [
|
||||
{ identifier = "cp312-manylinux_armv7l", version = "3.12", path_str = "/opt/python/cp312-cp312" },
|
||||
{ identifier = "cp313-manylinux_armv7l", version = "3.13", path_str = "/opt/python/cp313-cp313" },
|
||||
{ identifier = "cp313t-manylinux_armv7l", version = "3.13", path_str = "/opt/python/cp313-cp313t" },
|
||||
{ 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" },
|
||||
{ identifier = "pp310-manylinux_aarch64", version = "3.10", path_str = "/opt/python/pp310-pypy310_pp73" },
|
||||
{ identifier = "pp311-manylinux_aarch64", version = "3.11", path_str = "/opt/python/pp311-pypy311_pp73" },
|
||||
{ identifier = "pp37-manylinux_i686", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" },
|
||||
{ identifier = "pp38-manylinux_i686", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" },
|
||||
{ identifier = "pp39-manylinux_i686", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" },
|
||||
{ identifier = "pp310-manylinux_i686", version = "3.10", path_str = "/opt/python/pp310-pypy310_pp73" },
|
||||
{ identifier = "pp311-manylinux_i686", version = "3.11", path_str = "/opt/python/pp311-pypy311_pp73" },
|
||||
{ identifier = "cp36-musllinux_x86_64", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
|
||||
{ identifier = "cp37-musllinux_x86_64", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
|
||||
{ identifier = "cp38-musllinux_x86_64", version = "3.8", path_str = "/opt/python/cp38-cp38" },
|
||||
{ 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" },
|
||||
@@ -78,8 +61,6 @@ python_configurations = [
|
||||
{ identifier = "cp312-musllinux_x86_64", version = "3.12", path_str = "/opt/python/cp312-cp312" },
|
||||
{ identifier = "cp313-musllinux_x86_64", version = "3.13", path_str = "/opt/python/cp313-cp313" },
|
||||
{ identifier = "cp313t-musllinux_x86_64", version = "3.13", path_str = "/opt/python/cp313-cp313t" },
|
||||
{ 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" },
|
||||
@@ -87,8 +68,6 @@ python_configurations = [
|
||||
{ identifier = "cp312-musllinux_i686", version = "3.12", path_str = "/opt/python/cp312-cp312" },
|
||||
{ identifier = "cp313-musllinux_i686", version = "3.13", path_str = "/opt/python/cp313-cp313" },
|
||||
{ identifier = "cp313t-musllinux_i686", version = "3.13", path_str = "/opt/python/cp313-cp313t" },
|
||||
{ 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" },
|
||||
@@ -96,8 +75,6 @@ python_configurations = [
|
||||
{ identifier = "cp312-musllinux_aarch64", version = "3.12", path_str = "/opt/python/cp312-cp312" },
|
||||
{ identifier = "cp313-musllinux_aarch64", version = "3.13", path_str = "/opt/python/cp313-cp313" },
|
||||
{ identifier = "cp313t-musllinux_aarch64", version = "3.13", path_str = "/opt/python/cp313-cp313t" },
|
||||
{ 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" },
|
||||
@@ -105,8 +82,6 @@ python_configurations = [
|
||||
{ identifier = "cp312-musllinux_ppc64le", version = "3.12", path_str = "/opt/python/cp312-cp312" },
|
||||
{ identifier = "cp313-musllinux_ppc64le", version = "3.13", path_str = "/opt/python/cp313-cp313" },
|
||||
{ identifier = "cp313t-musllinux_ppc64le", version = "3.13", path_str = "/opt/python/cp313-cp313t" },
|
||||
{ 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" },
|
||||
@@ -114,8 +89,6 @@ python_configurations = [
|
||||
{ identifier = "cp312-musllinux_s390x", version = "3.12", path_str = "/opt/python/cp312-cp312" },
|
||||
{ identifier = "cp313-musllinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313" },
|
||||
{ identifier = "cp313t-musllinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313t" },
|
||||
{ identifier = "cp36-musllinux_armv7l", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
|
||||
{ identifier = "cp37-musllinux_armv7l", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
|
||||
{ identifier = "cp38-musllinux_armv7l", version = "3.8", path_str = "/opt/python/cp38-cp38" },
|
||||
{ identifier = "cp39-musllinux_armv7l", version = "3.9", path_str = "/opt/python/cp39-cp39" },
|
||||
{ identifier = "cp310-musllinux_armv7l", version = "3.10", path_str = "/opt/python/cp310-cp310" },
|
||||
@@ -127,8 +100,6 @@ python_configurations = [
|
||||
|
||||
[macos]
|
||||
python_configurations = [
|
||||
{ identifier = "cp36-macosx_x86_64", version = "3.6", url = "https://www.python.org/ftp/python/3.6.8/python-3.6.8-macosx10.9.pkg" },
|
||||
{ identifier = "cp37-macosx_x86_64", version = "3.7", url = "https://www.python.org/ftp/python/3.7.9/python-3.7.9-macosx10.9.pkg" },
|
||||
{ identifier = "cp38-macosx_x86_64", version = "3.8", url = "https://www.python.org/ftp/python/3.8.10/python-3.8.10-macosx10.9.pkg" },
|
||||
{ identifier = "cp38-macosx_arm64", version = "3.8", url = "https://www.python.org/ftp/python/3.8.10/python-3.8.10-macosx10.9.pkg" },
|
||||
{ identifier = "cp38-macosx_universal2", version = "3.8", url = "https://www.python.org/ftp/python/3.8.10/python-3.8.10-macosx10.9.pkg" },
|
||||
@@ -150,7 +121,6 @@ python_configurations = [
|
||||
{ identifier = "cp313t-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.2/python-3.13.2-macos11.pkg" },
|
||||
{ identifier = "cp313t-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.2/python-3.13.2-macos11.pkg" },
|
||||
{ identifier = "cp313t-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.2/python-3.13.2-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" },
|
||||
{ identifier = "pp39-macosx_x86_64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-macos_x86_64.tar.bz2" },
|
||||
@@ -163,10 +133,6 @@ python_configurations = [
|
||||
|
||||
[windows]
|
||||
python_configurations = [
|
||||
{ identifier = "cp36-win32", version = "3.6.8", arch = "32" },
|
||||
{ identifier = "cp36-win_amd64", version = "3.6.8", arch = "64" },
|
||||
{ identifier = "cp37-win32", version = "3.7.9", arch = "32" },
|
||||
{ identifier = "cp37-win_amd64", version = "3.7.9", arch = "64" },
|
||||
{ identifier = "cp38-win32", version = "3.8.10", arch = "32" },
|
||||
{ identifier = "cp38-win_amd64", version = "3.8.10", arch = "64" },
|
||||
{ identifier = "cp39-win32", version = "3.9.13", arch = "32" },
|
||||
@@ -187,7 +153,6 @@ python_configurations = [
|
||||
{ identifier = "cp312-win_arm64", version = "3.12.9", arch = "ARM64" },
|
||||
{ identifier = "cp313-win_arm64", version = "3.13.2", arch = "ARM64" },
|
||||
{ identifier = "cp313t-win_arm64", version = "3.13.2", 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.16-win64.zip" },
|
||||
{ identifier = "pp310-win_amd64", version = "3.10", arch = "64", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.18-win64.zip" },
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
#
|
||||
# This file is autogenerated by pip-compile with python 3.6
|
||||
# To update, run:
|
||||
#
|
||||
# nox -s update_constraints-3.6
|
||||
#
|
||||
build==0.9.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.10.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.8
|
||||
# via virtualenv
|
||||
filelock==3.4.1
|
||||
# via virtualenv
|
||||
importlib-metadata==4.8.3
|
||||
# via
|
||||
# build
|
||||
# pep517
|
||||
# virtualenv
|
||||
importlib-resources==5.4.0
|
||||
# via virtualenv
|
||||
packaging==21.3
|
||||
# via build
|
||||
pep517==0.13.1
|
||||
# via build
|
||||
platformdirs==2.4.0
|
||||
# via virtualenv
|
||||
pyparsing==3.1.1
|
||||
# via packaging
|
||||
tomli==1.2.3
|
||||
# via
|
||||
# build
|
||||
# pep517
|
||||
typing-extensions==4.1.1
|
||||
# via
|
||||
# delocate
|
||||
# importlib-metadata
|
||||
virtualenv==20.17.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
wheel==0.37.1
|
||||
# via delocate
|
||||
zipp==3.6.0
|
||||
# via
|
||||
# importlib-metadata
|
||||
# importlib-resources
|
||||
# pep517
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
pip==21.3.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
setuptools==59.6.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
@@ -1,39 +0,0 @@
|
||||
# This file was autogenerated by uv via the following command:
|
||||
# nox -s update_constraints
|
||||
altgraph==0.17.4
|
||||
# via macholib
|
||||
build==1.1.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.12.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.3.9
|
||||
# via virtualenv
|
||||
filelock==3.12.2
|
||||
# via virtualenv
|
||||
importlib-metadata==6.7.0
|
||||
# via
|
||||
# build
|
||||
# virtualenv
|
||||
macholib==1.16.3
|
||||
# via delocate
|
||||
packaging==24.0
|
||||
# via
|
||||
# build
|
||||
# delocate
|
||||
pip==24.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.0.0
|
||||
# via virtualenv
|
||||
pyproject-hooks==1.2.0
|
||||
# via build
|
||||
tomli==2.0.1
|
||||
# via build
|
||||
typing-extensions==4.7.1
|
||||
# via
|
||||
# delocate
|
||||
# importlib-metadata
|
||||
# platformdirs
|
||||
virtualenv==20.26.6
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
zipp==3.15.0
|
||||
# via importlib-metadata
|
||||
@@ -1,2 +1 @@
|
||||
py36 = { version = "20.21.1", url = "https://github.com/pypa/get-virtualenv/blob/20.21.1/public/virtualenv.pyz?raw=true" }
|
||||
default = { version = "20.29.1", url = "https://github.com/pypa/get-virtualenv/blob/20.29.1/public/virtualenv.pyz?raw=true" }
|
||||
|
||||
@@ -212,10 +212,7 @@ def setup_rust_cross_compile(
|
||||
|
||||
|
||||
def can_use_uv(python_configuration: PythonConfiguration) -> bool:
|
||||
conditions = (
|
||||
Version(python_configuration.version) >= Version("3.8"),
|
||||
not python_configuration.identifier.startswith("pp38-"),
|
||||
)
|
||||
conditions = (not python_configuration.identifier.startswith("pp38-"),)
|
||||
return all(conditions)
|
||||
|
||||
|
||||
|
||||
+36
-46
@@ -161,15 +161,15 @@ which means it can be given multiple times.
|
||||
manylinux-x86_64-image = "manylinux2014"
|
||||
|
||||
[[tool.cibuildwheel.overrides]]
|
||||
select = "cp36-*"
|
||||
select = "cp38-*"
|
||||
manylinux-x86_64-image = "manylinux1"
|
||||
|
||||
[[tool.cibuildwheel.overrides]]
|
||||
select = "cp3{7,8,9}-*"
|
||||
select = "cp3{9,10}-*"
|
||||
manylinux-x86_64-image = "manylinux2010"
|
||||
```
|
||||
|
||||
This example will build CPython 3.6 wheels on manylinux1, CPython 3.7-3.9
|
||||
This example will build CPython 3.8 wheels on manylinux1, CPython 3.9-3.10
|
||||
wheels on manylinux2010, and manylinux2014 wheels for any newer Python
|
||||
(like 3.10).
|
||||
|
||||
@@ -290,15 +290,12 @@ When setting the options, you can use shell-style globbing syntax, as per [fnmat
|
||||
|
||||
| | macOS | Windows | Linux Intel | Linux Other |
|
||||
|---------------|------------------------------------------------------------------------|-----------------------------------------------------|-----------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| Python 3.6 | cp36-macosx_x86_64 | cp36-win_amd64<br/>cp36-win32 | cp36-manylinux_x86_64<br/>cp36-manylinux_i686<br/>cp36-musllinux_x86_64<br/>cp36-musllinux_i686 | cp36-manylinux_aarch64<br/>cp36-manylinux_ppc64le<br/>cp36-manylinux_s390x<br/>cp36-manylinux_armv7l<br/>cp36-musllinux_aarch64<br/>cp36-musllinux_ppc64le<br/>cp36-musllinux_s390x<br/>cp36-musllinux_armv7l |
|
||||
| Python 3.7 | cp37-macosx_x86_64 | cp37-win_amd64<br/>cp37-win32 | cp37-manylinux_x86_64<br/>cp37-manylinux_i686<br/>cp37-musllinux_x86_64<br/>cp37-musllinux_i686 | cp37-manylinux_aarch64<br/>cp37-manylinux_ppc64le<br/>cp37-manylinux_s390x<br/>cp37-manylinux_armv7l<br/>cp37-musllinux_aarch64<br/>cp37-musllinux_ppc64le<br/>cp37-musllinux_s390x<br/>cp37-musllinux_armv7l |
|
||||
| Python 3.8 | cp38-macosx_x86_64<br/>cp38-macosx_universal2<br/>cp38-macosx_arm64 | cp38-win_amd64<br/>cp38-win32 | cp38-manylinux_x86_64<br/>cp38-manylinux_i686<br/>cp38-musllinux_x86_64<br/>cp38-musllinux_i686 | cp38-manylinux_aarch64<br/>cp38-manylinux_ppc64le<br/>cp38-manylinux_s390x<br/>cp38-manylinux_armv7l<br/>cp38-musllinux_aarch64<br/>cp38-musllinux_ppc64le<br/>cp38-musllinux_s390x<br/>cp38-musllinux_armv7l |
|
||||
| Python 3.9 | cp39-macosx_x86_64<br/>cp39-macosx_universal2<br/>cp39-macosx_arm64 | cp39-win_amd64<br/>cp39-win32<br/>cp39-win_arm64 | cp39-manylinux_x86_64<br/>cp39-manylinux_i686<br/>cp39-musllinux_x86_64<br/>cp39-musllinux_i686 | cp39-manylinux_aarch64<br/>cp39-manylinux_ppc64le<br/>cp39-manylinux_s390x<br/>cp39-manylinux_armv7l<br/>cp39-musllinux_aarch64<br/>cp39-musllinux_ppc64le<br/>cp39-musllinux_s390x<br/>cp39-musllinux_armv7l |
|
||||
| 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-manylinux_armv7l<br/>cp310-musllinux_aarch64<br/>cp310-musllinux_ppc64le<br/>cp310-musllinux_s390x<br/>cp310-musllinux_armv7l |
|
||||
| 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-manylinux_armv7l<br/>cp311-musllinux_aarch64<br/>cp311-musllinux_ppc64le<br/>cp311-musllinux_s390x<br/>cp311-musllinux_armv7l |
|
||||
| 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_armv7l<br/>cp312-musllinux_ppc64le<br/>cp312-musllinux_s390x<br/>cp312-musllinux_armv7l |
|
||||
| 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-manylinux_armv7l<br/>cp313-musllinux_aarch64<br/>cp313-musllinux_ppc64le<br/>cp313-musllinux_s390x<br/>cp313-musllinux_armv7l |
|
||||
| PyPy3.7 v7.3 | pp37-macosx_x86_64 | pp37-win_amd64 | pp37-manylinux_x86_64<br/>pp37-manylinux_i686 | pp37-manylinux_aarch64 |
|
||||
| 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 |
|
||||
| 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 |
|
||||
| PyPy3.10 v7.3 | pp310-macosx_x86_64<br/>pp310-macosx_arm64 | pp310-win_amd64 | pp310-manylinux_x86_64<br/>pp310-manylinux_i686 | pp310-manylinux_aarch64 |
|
||||
@@ -311,10 +308,10 @@ The lowest value you can set `MACOSX_DEPLOYMENT_TARGET` is as follows:
|
||||
|
||||
| Arch | Python version range | Minimum target |
|
||||
|-------|----------------------|----------------|
|
||||
| Intel | CPython 3.6-3.11 | 10.9 |
|
||||
| Intel | CPython 3.8-3.11 | 10.9 |
|
||||
| Intel | CPython 3.12+ | 10.13 |
|
||||
| AS | CPython or PyPy | 11 |
|
||||
| Intel | PyPy 3.7-3.8 | 10.13 |
|
||||
| Intel | PyPy 3.8 | 10.13 |
|
||||
| Intel | PyPy 3.9+ | 10.15 |
|
||||
|
||||
If you set the value lower, cibuildwheel will cap it to the lowest supported value for each target as needed.
|
||||
@@ -331,29 +328,26 @@ See the [cibuildwheel 1 documentation](https://cibuildwheel.pypa.io/en/1.x/) for
|
||||
!!! tab examples "Environment variables"
|
||||
|
||||
```yaml
|
||||
# Only build on CPython 3.6
|
||||
CIBW_BUILD: cp36-*
|
||||
|
||||
# Skip building on CPython 3.6 on the Mac
|
||||
CIBW_SKIP: cp36-macosx_x86_64
|
||||
# Only build on CPython 3.8
|
||||
CIBW_BUILD: cp38-*
|
||||
|
||||
# Skip building on CPython 3.8 on the Mac
|
||||
CIBW_SKIP: cp38-macosx_x86_64
|
||||
|
||||
# Skip building on CPython 3.6 on all platforms
|
||||
CIBW_SKIP: cp36-*
|
||||
# Skip building on CPython 3.8 on all platforms
|
||||
CIBW_SKIP: cp38-*
|
||||
|
||||
# Skip CPython 3.6 on Windows
|
||||
CIBW_SKIP: cp36-win*
|
||||
# Skip CPython 3.8 on Windows
|
||||
CIBW_SKIP: cp38-win*
|
||||
|
||||
# Skip CPython 3.6 on 32-bit Windows
|
||||
CIBW_SKIP: cp36-win32
|
||||
# Skip CPython 3.8 on 32-bit Windows
|
||||
CIBW_SKIP: cp38-win32
|
||||
|
||||
# Skip CPython 3.6 and CPython 3.7
|
||||
CIBW_SKIP: cp36-* cp37-*
|
||||
# Skip CPython 3.8 and CPython 3.9
|
||||
CIBW_SKIP: cp38-* cp39-*
|
||||
|
||||
# Skip Python 3.6 on Linux
|
||||
CIBW_SKIP: cp36-manylinux*
|
||||
# Skip Python 3.8 on Linux
|
||||
CIBW_SKIP: cp38-manylinux*
|
||||
|
||||
# Skip 32-bit builds
|
||||
CIBW_SKIP: "*-win32 *-manylinux_i686"
|
||||
@@ -368,29 +362,26 @@ See the [cibuildwheel 1 documentation](https://cibuildwheel.pypa.io/en/1.x/) for
|
||||
|
||||
```toml
|
||||
[tool.cibuildwheel]
|
||||
# Only build on CPython 3.6
|
||||
build = "cp36-*"
|
||||
|
||||
# Skip building on CPython 3.6 on the Mac
|
||||
skip = "cp36-macosx_x86_64"
|
||||
# Only build on CPython 3.8
|
||||
build = "cp38-*"
|
||||
|
||||
# Skip building on CPython 3.8 on the Mac
|
||||
skip = "cp38-macosx_x86_64"
|
||||
|
||||
# Skip building on CPython 3.6 on all platforms
|
||||
skip = "cp36-*"
|
||||
# Skip building on CPython 3.8 on all platforms
|
||||
skip = "cp38-*"
|
||||
|
||||
# Skip CPython 3.6 on Windows
|
||||
skip = "cp36-win*"
|
||||
# Skip CPython 3.8 on Windows
|
||||
skip = "cp38-win*"
|
||||
|
||||
# Skip CPython 3.6 on 32-bit Windows
|
||||
skip = "cp36-win32"
|
||||
# Skip CPython 3.8 on 32-bit Windows
|
||||
skip = "cp38-win32"
|
||||
|
||||
# Skip CPython 3.6 and CPython 3.7
|
||||
skip = ["cp36-*", "cp37-*"]
|
||||
# Skip CPython 3.8 and CPython 3.9
|
||||
skip = ["cp38-*", "cp39-*"]
|
||||
|
||||
# Skip Python 3.6 on Linux
|
||||
skip = "cp36-manylinux*"
|
||||
# Skip Python 3.8 on Linux
|
||||
skip = "cp38-manylinux*"
|
||||
|
||||
# Skip 32-bit builds
|
||||
skip = ["*-win32", "*-manylinux_i686"]
|
||||
@@ -518,7 +509,7 @@ simple keyword assignment in a top level function call. If you need to override
|
||||
this behaviour for some reason, you can use this option.
|
||||
|
||||
When setting this option, the syntax is the same as `project.requires-python`,
|
||||
using 'version specifiers' like `>=3.6`, according to
|
||||
using 'version specifiers' like `>=3.8`, according to
|
||||
[PEP440](https://www.python.org/dev/peps/pep-0440/#version-specifiers).
|
||||
|
||||
Default: reads your package's Python compatibility from `pyproject.toml`
|
||||
@@ -539,7 +530,7 @@ the package is compatible with all versions of Python that it can build.
|
||||
```toml
|
||||
[project]
|
||||
...
|
||||
requires-python = ">=3.6"
|
||||
requires-python = ">=3.8"
|
||||
```
|
||||
|
||||
Note that not all build backends fully support using a `[project]` table yet;
|
||||
@@ -555,7 +546,7 @@ the package is compatible with all versions of Python that it can build.
|
||||
!!! tab examples "Environment variables"
|
||||
|
||||
```yaml
|
||||
CIBW_PROJECT_REQUIRES_PYTHON: ">=3.6"
|
||||
CIBW_PROJECT_REQUIRES_PYTHON: ">=3.8"
|
||||
```
|
||||
|
||||
### `CIBW_ENABLE` {: #enable}
|
||||
@@ -683,10 +674,9 @@ possible, both through `--installer=uv` passed to build, as well as when making
|
||||
all build and test environments. This will generally speed up cibuildwheel.
|
||||
Make sure you have an external uv on Windows and macOS, either by
|
||||
pre-installing it, or installing cibuildwheel with the uv extra,
|
||||
`cibuildwheel[uv]`. `uv` will not be used for Python 3.6 or Python 3.7. You
|
||||
cannot use uv currently on Windows for ARM or for musllinux on s390x as
|
||||
binaries are not provided by uv. Legacy dependencies like setuptools on Python
|
||||
< 3.12 and pip are not installed if using uv.
|
||||
`cibuildwheel[uv]`. You cannot use uv currently on Windows for ARM or for
|
||||
musllinux on s390x as binaries are not provided by uv. Legacy dependencies like
|
||||
setuptools on Python < 3.12 and pip are not installed if using uv.
|
||||
|
||||
Pyodide ignores this setting, as only "build" is supported.
|
||||
|
||||
@@ -1389,7 +1379,7 @@ here and it will be used instead.
|
||||
If you need different dependencies for each python version, provide them
|
||||
in the same folder with a `-pythonXY` suffix. e.g. if your
|
||||
`CIBW_DEPENDENCY_VERSIONS=./constraints.txt`, cibuildwheel will use
|
||||
`./constraints-python37.txt` on Python 3.7, or fallback to
|
||||
`./constraints-python38.txt` on Python 3.8, or fallback to
|
||||
`./constraints.txt` if that's not found.
|
||||
|
||||
Platform-specific environment variables are also available:<br/>
|
||||
|
||||
+3
-3
@@ -100,11 +100,11 @@ You can override the cache folder using the ``CIBW_CACHE_PATH`` environment vari
|
||||
CPython:
|
||||
|
||||
```console
|
||||
Error: CPython 3.6 is not installed.
|
||||
Error: CPython 3.9 is not installed.
|
||||
cibuildwheel will not perform system-wide installs when running outside of CI.
|
||||
To build locally, install CPython 3.6 on this machine, or, disable this version of Python using CIBW_SKIP=cp36-macosx_*
|
||||
To build locally, install CPython 3.9 on this machine, or, disable this version of Python using CIBW_SKIP=cp39-macosx_*
|
||||
|
||||
Download link: https://www.python.org/ftp/python/3.6.8/python-3.6.8-macosx10.9.pkg
|
||||
Download link: https://www.python.org/ftp/python/3.9.8/python-3.9.8-macosx10.9.pkg
|
||||
```
|
||||
|
||||
### Pyodide (WebAssembly) builds (experimental)
|
||||
|
||||
@@ -40,7 +40,7 @@ def test(tmp_path):
|
||||
add_env={
|
||||
"CIBW_MANYLINUX_X86_64_IMAGE": "dockcross/manylinux2014-x64",
|
||||
"CIBW_MANYLINUX_I686_IMAGE": "dockcross/manylinux2014-x86",
|
||||
"CIBW_BUILD": "cp3{6,7,8,9}-manylinux*",
|
||||
"CIBW_BUILD": "cp3{8,9}-manylinux*",
|
||||
},
|
||||
)
|
||||
|
||||
@@ -48,6 +48,6 @@ def test(tmp_path):
|
||||
expected_wheels = [
|
||||
w
|
||||
for w in utils.expected_wheels("spam", "0.1.0", musllinux_versions=[])
|
||||
if "-cp36-" in w or "-cp37-" in w or "-cp38-" in w or "-cp39-" in w
|
||||
if "-cp38-" in w or "-cp39-" in w
|
||||
]
|
||||
assert set(actual_wheels) == set(expected_wheels)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import platform
|
||||
import re
|
||||
import textwrap
|
||||
from pathlib import Path
|
||||
@@ -53,12 +52,10 @@ def get_versions_from_constraint_file(constraint_file: Path) -> dict[str, str]:
|
||||
return dict(re.findall(VERSION_REGEX, constraint_file_text))
|
||||
|
||||
|
||||
@pytest.mark.parametrize("python_version", ["3.6", "3.8", "3.12"])
|
||||
@pytest.mark.parametrize("python_version", ["3.8", "3.12"])
|
||||
def test_pinned_versions(tmp_path, python_version, build_frontend_env_nouv):
|
||||
if utils.platform == "linux":
|
||||
pytest.skip("linux doesn't pin individual tool versions, it pins manylinux images instead")
|
||||
if python_version == "3.6" and utils.platform == "macos" and platform.machine() == "arm64":
|
||||
pytest.skip("macOS arm64 does not support Python 3.6")
|
||||
if python_version != "3.12" and utils.platform == "pyodide":
|
||||
pytest.skip(f"pyodide does not support Python {python_version}")
|
||||
|
||||
@@ -132,12 +129,11 @@ def test_dependency_constraints_file(tmp_path, build_frontend_env_nouv):
|
||||
add_env={
|
||||
"CIBW_ENVIRONMENT": cibw_environment_option,
|
||||
"CIBW_DEPENDENCY_VERSIONS": str(constraints_file),
|
||||
"CIBW_SKIP": "cp36-*",
|
||||
**build_frontend_env_nouv,
|
||||
},
|
||||
)
|
||||
|
||||
# also check that we got the right wheels
|
||||
expected_wheels = [w for w in utils.expected_wheels("spam", "0.1.0") if "-cp36" not in w]
|
||||
expected_wheels = utils.expected_wheels("spam", "0.1.0")
|
||||
|
||||
assert set(actual_wheels) == set(expected_wheels)
|
||||
|
||||
+2
-5
@@ -198,8 +198,6 @@ def expected_wheels(
|
||||
python_abi_tags = ["cp312-cp312"]
|
||||
if python_abi_tags is None:
|
||||
python_abi_tags = [
|
||||
"cp36-cp36m",
|
||||
"cp37-cp37m",
|
||||
"cp38-cp38",
|
||||
"cp39-cp39",
|
||||
"cp310-cp310",
|
||||
@@ -211,7 +209,6 @@ def expected_wheels(
|
||||
|
||||
if machine_arch in ["x86_64", "AMD64", "x86", "aarch64"]:
|
||||
python_abi_tags += [
|
||||
"pp37-pypy37_pp73",
|
||||
"pp38-pypy38_pp73",
|
||||
"pp39-pypy39_pp73",
|
||||
"pp310-pypy310_pp73",
|
||||
@@ -297,12 +294,12 @@ def expected_wheels(
|
||||
|
||||
elif platform == "macos":
|
||||
if python_abi_tag.startswith("pp"):
|
||||
if python_abi_tag.startswith(("pp37", "pp38")):
|
||||
if python_abi_tag.startswith("pp38"):
|
||||
min_macosx = macosx_deployment_target
|
||||
else:
|
||||
min_macosx = _floor_macosx(macosx_deployment_target, "10.15")
|
||||
elif python_abi_tag.startswith("cp"):
|
||||
if python_abi_tag.startswith(("cp36", "cp37", "cp38", "cp39", "cp310", "cp311")):
|
||||
if python_abi_tag.startswith(("cp38", "cp39", "cp310", "cp311")):
|
||||
min_macosx = macosx_deployment_target
|
||||
else:
|
||||
min_macosx = _floor_macosx(macosx_deployment_target, "10.13")
|
||||
|
||||
@@ -18,6 +18,6 @@ def test_defaults():
|
||||
assert dependency_constraints.get_for_python_version("3.9").samefile(
|
||||
resources_dir / "constraints-python39.txt"
|
||||
)
|
||||
assert dependency_constraints.get_for_python_version("3.6").samefile(
|
||||
resources_dir / "constraints-python36.txt"
|
||||
assert dependency_constraints.get_for_python_version("3.13").samefile(
|
||||
resources_dir / "constraints-python313.txt"
|
||||
)
|
||||
|
||||
@@ -30,7 +30,7 @@ def test_linux_container_split(tmp_path: Path, monkeypatch: pytest.MonkeyPatch)
|
||||
archs = "x86_64 i686"
|
||||
|
||||
[[tool.cibuildwheel.overrides]]
|
||||
select = "cp{37,38,39,310}-*"
|
||||
select = "cp{38,39,310}-*"
|
||||
manylinux-x86_64-image = "other_container_image"
|
||||
manylinux-i686-image = "other_container_image"
|
||||
|
||||
@@ -68,29 +68,28 @@ def test_linux_container_split(tmp_path: Path, monkeypatch: pytest.MonkeyPatch)
|
||||
|
||||
default_container_engine = OCIContainerEngineConfig(name="docker")
|
||||
|
||||
assert build_steps[0].container_image == "normal_container_image"
|
||||
assert identifiers(build_steps[0]) == [
|
||||
"cp36-manylinux_x86_64",
|
||||
assert build_steps[0].container_image == "other_container_image"
|
||||
assert identifiers(build_steps[0]) == ["cp38-manylinux_x86_64"]
|
||||
assert before_alls(build_steps[0]) == [""]
|
||||
assert container_engines(build_steps[0]) == [default_container_engine]
|
||||
|
||||
assert build_steps[1].container_image == "other_container_image"
|
||||
assert identifiers(build_steps[1]) == ["cp39-manylinux_x86_64"]
|
||||
assert before_alls(build_steps[1]) == ["echo 'a cp39-only command'"]
|
||||
assert container_engines(build_steps[1]) == [default_container_engine]
|
||||
|
||||
assert build_steps[2].container_image == "other_container_image"
|
||||
assert identifiers(build_steps[2]) == ["cp310-manylinux_x86_64"]
|
||||
assert before_alls(build_steps[2]) == [""]
|
||||
assert container_engines(build_steps[2]) == [
|
||||
OCIContainerEngineConfig(name="docker", create_args=("--privileged",))
|
||||
]
|
||||
|
||||
assert build_steps[3].container_image == "normal_container_image"
|
||||
assert identifiers(build_steps[3]) == [
|
||||
"cp311-manylinux_x86_64",
|
||||
"cp312-manylinux_x86_64",
|
||||
"cp313-manylinux_x86_64",
|
||||
]
|
||||
assert before_alls(build_steps[0]) == [""] * 4
|
||||
assert container_engines(build_steps[0]) == [default_container_engine] * 4
|
||||
|
||||
assert build_steps[1].container_image == "other_container_image"
|
||||
assert identifiers(build_steps[1]) == ["cp37-manylinux_x86_64", "cp38-manylinux_x86_64"]
|
||||
assert before_alls(build_steps[1]) == [""] * 2
|
||||
assert container_engines(build_steps[1]) == [default_container_engine] * 2
|
||||
|
||||
assert build_steps[2].container_image == "other_container_image"
|
||||
assert identifiers(build_steps[2]) == ["cp39-manylinux_x86_64"]
|
||||
assert before_alls(build_steps[2]) == ["echo 'a cp39-only command'"]
|
||||
assert container_engines(build_steps[2]) == [default_container_engine]
|
||||
|
||||
assert build_steps[3].container_image == "other_container_image"
|
||||
assert identifiers(build_steps[3]) == ["cp310-manylinux_x86_64"]
|
||||
assert before_alls(build_steps[3]) == [""]
|
||||
assert container_engines(build_steps[3]) == [
|
||||
OCIContainerEngineConfig(name="docker", create_args=("--privileged",))
|
||||
]
|
||||
assert before_alls(build_steps[3]) == [""] * 3
|
||||
assert container_engines(build_steps[3]) == [default_container_engine] * 3
|
||||
|
||||
@@ -309,6 +309,7 @@ def test_config_settings(platform_specific, platform, intercepted_build_args, mo
|
||||
[
|
||||
"cp27-*",
|
||||
"cp35-*",
|
||||
"?p36-*",
|
||||
"?p27*",
|
||||
"?p2*",
|
||||
"?p35*",
|
||||
@@ -327,7 +328,8 @@ def test_build_selector_deprecated_error(monkeypatch, selector, pattern, capsys)
|
||||
main()
|
||||
|
||||
stderr = capsys.readouterr().err
|
||||
msg = f"cibuildwheel 2.x no longer supports Python < 3.6. Please use the 1.x series or update {selector}"
|
||||
series = "2" if "6" in pattern else "1"
|
||||
msg = f"cibuildwheel 3.x no longer supports Python < 3.8. Please use the {series}.x series or update {selector}"
|
||||
assert msg in stderr
|
||||
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ from cibuildwheel.__main__ import main
|
||||
from cibuildwheel.oci_container import OCIPlatform
|
||||
from cibuildwheel.util import file
|
||||
|
||||
DEFAULT_IDS = {"cp36", "cp37", "cp38", "cp39", "cp310", "cp311", "cp312", "cp313"}
|
||||
ALL_IDS = DEFAULT_IDS | {"cp313t", "pp37", "pp38", "pp39", "pp310", "pp311"}
|
||||
DEFAULT_IDS = {"cp38", "cp39", "cp310", "cp311", "cp312", "cp313"}
|
||||
ALL_IDS = DEFAULT_IDS | {"cp313t", "pp38", "pp39", "pp310", "pp311"}
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -114,7 +114,7 @@ manylinux-i686-image = "manylinux2014"
|
||||
musllinux-x86_64-image = "musllinux_1_1"
|
||||
|
||||
[[tool.cibuildwheel.overrides]]
|
||||
select = "cp36-manylinux_x86_64"
|
||||
select = "cp38-manylinux_x86_64"
|
||||
before-all = "true"
|
||||
"""
|
||||
)
|
||||
@@ -134,8 +134,8 @@ before-all = "true"
|
||||
assert kwargs["container"]["oci_platform"] == OCIPlatform.AMD64
|
||||
|
||||
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
||||
assert identifiers == {"cp36-manylinux_x86_64"}
|
||||
assert kwargs["options"].build_options("cp36-manylinux_x86_64").before_all == "true"
|
||||
assert identifiers == {"cp38-manylinux_x86_64"}
|
||||
assert kwargs["options"].build_options("cp38-manylinux_x86_64").before_all == "true"
|
||||
|
||||
kwargs = build_in_container.call_args_list[1][1]
|
||||
assert "quay.io/pypa/manylinux2014_x86_64" in kwargs["container"]["image"]
|
||||
@@ -147,20 +147,19 @@ before-all = "true"
|
||||
f"{x}-manylinux_x86_64"
|
||||
for x in ALL_IDS
|
||||
- {
|
||||
"cp36",
|
||||
"cp38",
|
||||
"cp310",
|
||||
"cp311",
|
||||
"cp312",
|
||||
"cp313",
|
||||
"cp313t",
|
||||
"pp37",
|
||||
"pp38",
|
||||
"pp39",
|
||||
"pp310",
|
||||
"pp311",
|
||||
}
|
||||
}
|
||||
assert kwargs["options"].build_options("cp37-manylinux_x86_64").before_all == ""
|
||||
assert kwargs["options"].build_options("cp39-manylinux_x86_64").before_all == ""
|
||||
|
||||
kwargs = build_in_container.call_args_list[2][1]
|
||||
assert "quay.io/pypa/manylinux_2_28_x86_64" in kwargs["container"]["image"]
|
||||
@@ -175,7 +174,6 @@ before-all = "true"
|
||||
"cp312",
|
||||
"cp313",
|
||||
"cp313t",
|
||||
"pp37",
|
||||
"pp38",
|
||||
"pp39",
|
||||
"pp310",
|
||||
@@ -198,7 +196,7 @@ before-all = "true"
|
||||
|
||||
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
||||
assert identifiers == {
|
||||
f"{x}-musllinux_x86_64" for x in ALL_IDS & {"cp36", "cp37", "cp38", "cp39"} if "pp" not in x
|
||||
f"{x}-musllinux_x86_64" for x in ALL_IDS & {"cp38", "cp39"} if "pp" not in x
|
||||
}
|
||||
|
||||
kwargs = build_in_container.call_args_list[5][1]
|
||||
@@ -207,7 +205,7 @@ before-all = "true"
|
||||
assert kwargs["container"]["oci_platform"] == OCIPlatform.AMD64
|
||||
identifiers = {x.identifier for x in kwargs["platform_configs"]}
|
||||
assert identifiers == {
|
||||
f"{x}-musllinux_x86_64" for x in ALL_IDS - {"cp36", "cp37", "cp38", "cp39"} if "pp" not in x
|
||||
f"{x}-musllinux_x86_64" for x in ALL_IDS - {"cp38", "cp39"} if "pp" not in x
|
||||
}
|
||||
|
||||
kwargs = build_in_container.call_args_list[6][1]
|
||||
|
||||
@@ -19,7 +19,7 @@ from cibuildwheel.selector import EnableGroup
|
||||
|
||||
PYPROJECT_1 = """
|
||||
[tool.cibuildwheel]
|
||||
build = ["cp38*", "cp37*"]
|
||||
build = ["cp38-*", "cp313-*"]
|
||||
skip = ["*musllinux*"]
|
||||
environment = {FOO="BAR"}
|
||||
|
||||
@@ -34,7 +34,7 @@ environment-pass = ["EXAMPLE_ENV"]
|
||||
test-requires = "else"
|
||||
|
||||
[[tool.cibuildwheel.overrides]]
|
||||
select = "cp37*"
|
||||
select = "cp313-*"
|
||||
test-command = "pyproject-override"
|
||||
manylinux-x86_64-image = "manylinux2014"
|
||||
"""
|
||||
@@ -60,7 +60,7 @@ def test_options_1(tmp_path, monkeypatch):
|
||||
|
||||
override_display = """\
|
||||
*: pyproject
|
||||
cp37-manylinux_x86_64, cp37-manylinux_i686: pyproject-override"""
|
||||
cp313-manylinux_x86_64, cp313-manylinux_i686: pyproject-override"""
|
||||
print(options.summary(identifiers))
|
||||
|
||||
assert override_display in options.summary(identifiers)
|
||||
@@ -78,7 +78,7 @@ def test_options_1(tmp_path, monkeypatch):
|
||||
assert local.test_sources == ["test", "other dir"]
|
||||
assert local.manylinux_images["x86_64"] == pinned_x86_64_container_image["manylinux1"]
|
||||
|
||||
local = options.build_options("cp37-manylinux_x86_64")
|
||||
local = options.build_options("cp313-manylinux_x86_64")
|
||||
assert local.manylinux_images is not None
|
||||
assert local.test_command == "pyproject-override"
|
||||
assert local.test_sources == ["test", "other dir"]
|
||||
|
||||
Reference in New Issue
Block a user