Compare commits

...
12 Commits
Author SHA1 Message Date
Henry Schreiner 3c5ff09888 Bump version: v3.0.0rc3 2025-06-11 00:57:01 -04:00
cibuildwheel-bot[bot] 1b9a56e014 [Bot] Update dependencies (#2455) 2025-06-10 21:06:51 -04:00
Henry Schreiner aa9fe2a24e ci: use uv python for docs (binary b1) (#2462)
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2025-06-10 18:28:34 -04:00
Henry SchreinerandJoe Rickerby e188d9e260 feat: remove 32-bit linux from auto arch, fix auto32 on linux aarch64 (#2458)
* feat: remove 32-bit linux from auto arch, fix auto32 on linux aarch64

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* Apply suggestions from code review

Co-authored-by: Joe Rickerby <joerick@mac.com>

* Update cibuildwheel/architecture.py

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Joe Rickerby <joerick@mac.com>
2025-06-10 17:57:41 -04:00
Henry Schreiner 3fa7bd1e72 ci: fix cirrus and reduce rebuilds (#2460)
* ci: fix Cirrus CI on Windows

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* ci: skip unrelated changes more often

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2025-06-10 17:57:25 -04:00
Joe Rickerby c6368be701 Move to the OS-latest image tags on Azure Pipelines (#2461) 2025-06-10 16:48:53 -04:00
Henry Schreiner dcecda6962 chore: handle update of cog to 3.5 (#2459)
chore: handle update of cog

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2025-06-10 01:54:45 -04:00
Henry Schreiner adc58e93d1 Revert "ci: update example too"
This reverts commit 487154abbb.
2025-06-09 23:39:56 -04:00
Henry Schreiner 487154abbb ci: update example too 2025-06-09 23:15:34 -04:00
Henry Schreiner 0fe82c5882 chore: order python-standalone releases for stability (#2456)
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2025-06-09 18:32:32 -04:00
pre-commit-ci[bot]andpre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> 0b6c7d0aff [pre-commit.ci] pre-commit autoupdate (#2457)
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.11.12 → v0.11.13](https://github.com/astral-sh/ruff-pre-commit/compare/v0.11.12...v0.11.13)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-06-09 19:37:40 +01:00
Henry Schreiner 38dab4b641 docs: warning about pyodide-version (#2450) 2025-06-06 09:57:58 -04:00
39 changed files with 269 additions and 162 deletions
+7 -4
View File
@@ -1,9 +1,9 @@
only_if: changesInclude('.cirrus.yml') || ($CIRRUS_BRANCH == "main" && !changesIncludeOnly('docs/*', '.pre-commit-config.yaml')) || $CIRRUS_BRANCH =~ 'cirrus.*'
only_if: changesInclude('.cirrus.yml') || ($CIRRUS_BRANCH == "main" && !changesIncludeOnly('.github/*', 'bin/*', 'docs/*', '.circleci/*', '.travis.yml', '.pre-commit-config.yaml', '.readthedocs.yml', 'azure-pipelines.yml', 'README.md', 'mkdocs.yml', 'noxfile.py')) || $CIRRUS_BRANCH =~ 'cirrus.*'
run_tests: &RUN_TESTS
install_cibuildwheel_script:
- python -m pip install dependency-groups
- python -m dependency_groups test | xargs python -m pip install -e.
- python -m pip install -U pip
- python -m pip install -e. --group test
run_cibuildwheel_tests_script:
- python ./bin/run_tests.py
@@ -55,9 +55,12 @@ windows_x86_task:
memory: 8G
install_pre_requirements_script:
- certutil -generateSSTFromWU roots.sst
- certutil -addstore -f root roots.sst
- del roots.sst
- choco install -y --no-progress python3 --version 3.12.4
- refreshenv
- echo PATH=%PATH% >> "%CIRRUS_ENV%"
- powershell -Command "$cleanPath = $env:PATH -replace ';+$', ''; Add-Content -Path $env:CIRRUS_ENV -Value ('PATH=' + $cleanPath)"
<<: *RUN_TESTS
macos_arm64_task:
+12 -1
View File
@@ -12,8 +12,19 @@ on:
- reopened
- labeled
paths-ignore:
- 'docs/**'
- .ci*
- bin/*
- docs/**
- examples/azure-pipelines-*
- examples/ci*
- examples/travis-ci-*
- .pre-commit-config.yaml
- .readthedocs.yml
- .travis.yml
- README.md
- azure-pipelines.yml
- mkdocs.yml
- noxfile.py
workflow_dispatch:
# allow manual runs on branches without a PR
+2 -2
View File
@@ -14,7 +14,7 @@ repos:
- id: trailing-whitespace
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.11.12
rev: v0.11.13
hooks:
- id: ruff
args: ["--fix", "--show-fixes"]
@@ -69,7 +69,7 @@ repos:
pass_filenames: false
entry: cog -c -P -r -I ./bin README.md
files: '^(README\.md|docs/changelog\.md|docs/options\.md|bin/readme.*)$'
additional_dependencies: [cogapp]
additional_dependencies: [cogapp>=3.5]
- repo: https://github.com/codespell-project/codespell
rev: v2.4.1
+1 -3
View File
@@ -5,9 +5,7 @@ version: 2
build:
os: ubuntu-24.04
commands:
- asdf install python 3.14-dev
- asdf global python 3.14-dev
- asdf plugin add uv
- asdf install uv latest
- asdf global uv latest
- NO_COLOR=1 uv run --no-dev --group docs mkdocs build --strict --site-dir $READTHEDOCS_OUTPUT/html
- NO_COLOR=1 uv run --python 3.14 --managed-python --no-dev --group docs mkdocs build --strict --site-dir $READTHEDOCS_OUTPUT/html
+12 -11
View File
@@ -97,7 +97,7 @@ jobs:
- uses: actions/setup-python@v5
- name: Install cibuildwheel
run: python -m pip install cibuildwheel==3.0.0rc2
run: python -m pip install cibuildwheel==3.0.0rc3
- name: Build wheels
run: python -m cibuildwheel --output-dir wheelhouse
@@ -162,7 +162,7 @@ The following diagram summarises the steps that cibuildwheel takes on each platf
| | [`build-verbosity`](https://cibuildwheel.pypa.io/en/stable/options/#build-verbosity) | Increase/decrease the output of the build |
<!--[[[end]]] (checksum: 4d6a8418630e9ed43251973d93798a1b) -->
<!--[[[end]]] (sum: TWqEGGMOnt) -->
These options can be specified in a pyproject.toml file, or as environment variables, see [configuration docs](https://cibuildwheel.pypa.io/en/latest/configuration/).
@@ -241,6 +241,15 @@ If you've used previous versions of the beta:
- ⚠️ Previous betas of v3.0 changed the working directory for tests. This has been rolled back to the v2.x behaviour, so you might need to change configs if you adapted to the beta 1 or 2 behaviour. See [issue #2406](https://github.com/pypa/cibuildwheel/issues/2406) for more information.
- ⚠️ GraalPy shipped with the identifier `gp242-*` in previous betas, this has been changed to `gp311_242-*` to be consistent with other interpreters, and to fix a bug with GraalPy and project requires-python detection. If you were using GraalPy, you might need to update your config to use the new identifier.
- ⚠️ `test-sources` now uses `project` directory instead of the `package` directory (matching the docs).
- ⚠️ 32-bit linux builds were removed from `"auto"` (the default), now require `"auto32"` or explicit archs, as modern manylinux images (including our new default) do not support them.
#### v3.0.0rc3
_11 June 2025_
- 🛠 32-bit linux builds removed from `"auto"`, requires explicit `"auto32"`. (#2458)
- 📚 Warn that `pyodide-version` is experimental. (#2450)
#### v3.0.0rc2
@@ -265,15 +274,7 @@ _3 June 2025_
- 🛠 Use the standard Schema line for the integrated JSONSchema. (#2433)
- 📚 Use Python 3.14 color output in docs CLI output. (#2407)
#### v3.0.0b4
_29 May 2025_
- 🛠 Dependency updates, including Python 3.14.0b2. (#2371)
- 🛠 Remove the addition of `PYTHONSAFEPATH` to `test-environment`. (#2429)
- 📚 README table now matches docs and auto-updates. (#2427, #2428)
<!-- [[[end]]] (checksum: 48d3233c1809c1d7a93dc7291752b4d4) -->
<!-- [[[end]]] (sum: c1HE9PQmvW) -->
---
+15 -4
View File
@@ -1,13 +1,24 @@
pr:
paths:
exclude:
- docs/*
- .github/**
- bin/*
- docs/**
- examples/github-*
- examples/ci*
- examples/travis-ci-*
- .ci*
- .pre-commit-config.yaml
- .readthedocs.yml
- .travis.yml
- README.md
- mkdocs.yml
- noxfile.py
jobs:
- job: linux_311
timeoutInMinutes: 180
pool: {vmImage: 'Ubuntu-22.04'}
pool: {vmImage: 'ubuntu-latest'}
steps:
- task: UsePythonVersion@0
inputs:
@@ -25,7 +36,7 @@ jobs:
python ./bin/run_tests.py
- job: macos_311
pool: {vmImage: 'macOS-13'}
pool: {vmImage: 'macOS-latest'}
timeoutInMinutes: 120
steps:
- task: UsePythonVersion@0
@@ -43,7 +54,7 @@ jobs:
python ./bin/run_tests.py
- job: windows_311
pool: {vmImage: 'windows-2019'}
pool: {vmImage: 'windows-latest'}
timeoutInMinutes: 180
steps:
- task: UsePythonVersion@0
+10 -10
View File
@@ -25,25 +25,25 @@ def main() -> None:
f"repos/astral-sh/python-build-standalone/releases/tags/{latest_tag}"
)["assets"]
assets: list[PythonBuildStandaloneAsset] = []
assets = [
PythonBuildStandaloneAsset(name=ga["name"], url=ga["browser_download_url"])
for ga in github_assets
if ga["name"].endswith("install_only.tar.gz")
]
for github_asset in github_assets:
name = github_asset["name"]
if not name.endswith("install_only.tar.gz"):
continue
url = github_asset["browser_download_url"]
assets.append({"name": name, "url": url})
# Try to keep output order stable
assets = sorted(assets, key=lambda x: x["name"])
# Write the assets to the JSON file. One day, we might need to support
# multiple releases, but for now, we only support the latest one
json_file_contents: PythonBuildStandaloneReleaseData = {
"releases": [
json_file_contents = PythonBuildStandaloneReleaseData(
releases=[
{
"tag": latest_tag,
"assets": assets,
}
]
}
)
with PYTHON_BUILD_STANDALONE_RELEASES.open("w", encoding="utf-8") as f:
json.dump(json_file_contents, f, indent=2)
+1 -1
View File
@@ -1 +1 @@
__version__ = "3.0.0rc2"
__version__ = "3.0.0rc3"
+52 -38
View File
@@ -75,24 +75,24 @@ class Architecture(StrEnum):
def parse_config(config: str, platform: PlatformName) -> "set[Architecture]":
result = set()
for arch_str in re.split(r"[\s,]+", config):
if arch_str == "auto":
result |= Architecture.auto_archs(platform=platform)
elif arch_str == "native":
native_arch = Architecture.native_arch(platform=platform)
if native_arch:
result.add(native_arch)
elif arch_str == "all":
result |= Architecture.all_archs(platform=platform)
elif arch_str == "auto64":
result |= Architecture.bitness_archs(platform=platform, bitness="64")
elif arch_str == "auto32":
result |= Architecture.bitness_archs(platform=platform, bitness="32")
else:
try:
result.add(Architecture(arch_str))
except ValueError as e:
msg = f"Invalid architecture '{arch_str}'"
raise errors.ConfigurationError(msg) from e
match arch_str:
case "auto":
result |= Architecture.auto_archs(platform=platform)
case "native":
if native_arch := Architecture.native_arch(platform=platform):
result.add(native_arch)
case "all":
result |= Architecture.all_archs(platform=platform)
case "auto64":
result |= Architecture.bitness_archs(platform=platform, bitness="64")
case "auto32":
result |= Architecture.bitness_archs(platform=platform, bitness="32")
case _:
try:
result.add(Architecture(arch_str))
except ValueError as e:
msg = f"Invalid architecture '{arch_str}'"
raise errors.ConfigurationError(msg) from e
return result
@staticmethod
@@ -142,19 +142,12 @@ class Architecture(StrEnum):
return set() # can't build anything on this platform
result = {native_arch}
if platform == "linux":
if Architecture.x86_64 in result:
# x86_64 machines can run i686 containers
result.add(Architecture.i686)
elif Architecture.aarch64 in result and _check_aarch32_el0():
result.add(Architecture.armv7l)
elif platform == "windows" and Architecture.AMD64 in result:
result.add(Architecture.x86)
elif platform == "ios" and native_arch == Architecture.arm64_iphonesimulator:
# Also build the device wheel if we're on ARM64.
result.add(Architecture.arm64_iphoneos)
match platform:
case "windows" if Architecture.AMD64 in result:
result.add(Architecture.x86)
case "ios" if native_arch == Architecture.arm64_iphonesimulator:
# Also build the device wheel if we're on ARM64.
result.add(Architecture.arm64_iphoneos)
return result
@@ -183,14 +176,35 @@ class Architecture(StrEnum):
@staticmethod
def bitness_archs(platform: PlatformName, bitness: Literal["64", "32"]) -> "set[Architecture]":
archs_32 = {Architecture.i686, Architecture.x86, Architecture.armv7l}
auto_archs = Architecture.auto_archs(platform)
# This map maps 64-bit architectures to their 32-bit equivalents.
archs_map = {
Architecture.x86_64: Architecture.i686,
Architecture.AMD64: Architecture.x86,
Architecture.aarch64: Architecture.armv7l,
}
native_arch = Architecture.native_arch(platform)
if bitness == "64":
return auto_archs - archs_32
if bitness == "32":
return auto_archs & archs_32
typing.assert_never(bitness)
if native_arch is None:
return set() # can't build anything on this platform
if native_arch == Architecture.wasm32:
return {native_arch} if bitness == "32" else set()
match bitness:
case "64":
return {native_arch} if native_arch not in archs_map.values() else set()
case "32":
if native_arch in archs_map.values():
return {native_arch}
elif native_arch in archs_map and platform in {"linux", "windows"}:
if native_arch == Architecture.aarch64 and not _check_aarch32_el0():
# If we're on aarch64, skip if we cannot build armv7l wheels.
return set()
return {archs_map[native_arch]}
else:
return set()
case _:
typing.assert_never(bitness)
def allowed_architectures_check(
@@ -72,7 +72,7 @@ pyodide-lock==0.1.0a7
# via pyodide-build
pyproject-hooks==1.2.0
# via build
requests==2.32.3
requests==2.32.4
# via pyodide-build
resolvelib==1.1.0
# via pyodide-build
@@ -81,7 +81,7 @@ rich==14.0.0
# pyodide-build
# pyodide-cli
# typer
ruamel-yaml==0.18.12
ruamel-yaml==0.18.14
# via pyodide-build
ruamel-yaml-clib==0.2.12
# via ruamel-yaml
@@ -72,7 +72,7 @@ pyodide-lock==0.1.0a7
# via pyodide-build
pyproject-hooks==1.2.0
# via build
requests==2.32.3
requests==2.32.4
# via pyodide-build
resolvelib==1.1.0
# via pyodide-build
@@ -81,7 +81,7 @@ rich==14.0.0
# pyodide-build
# pyodide-cli
# typer
ruamel-yaml==0.18.12
ruamel-yaml==0.18.14
# via pyodide-build
ruamel-yaml-clib==0.2.12
# via ruamel-yaml
@@ -30,5 +30,5 @@ typing-extensions==4.14.0
# via delocate
virtualenv==20.31.2
# via -r cibuildwheel/resources/constraints.in
zipp==3.22.0
zipp==3.23.0
# via importlib-metadata
@@ -30,5 +30,5 @@ typing-extensions==4.14.0
# via delocate
virtualenv==20.31.2
# via -r cibuildwheel/resources/constraints.in
zipp==3.22.0
zipp==3.23.0
# via importlib-metadata
+27 -27
View File
@@ -1,47 +1,47 @@
[x86_64]
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.06.04-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.06.04-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.06.04-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2025.06.04-1
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.06.08-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.06.08-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.06.08-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2025.06.08-1
[i686]
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.06.04-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2025.06.04-1
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.06.08-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2025.06.08-1
[aarch64]
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.06.04-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.06.04-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.06.04-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2025.06.04-1
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.06.08-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.06.08-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.06.08-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2025.06.08-1
[ppc64le]
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2025.06.04-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2025.06.04-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_ppc64le:2025.06.04-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2025.06.04-1
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2025.06.08-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2025.06.08-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_ppc64le:2025.06.08-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2025.06.08-1
[s390x]
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2025.06.04-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2025.06.04-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_s390x:2025.06.04-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2025.06.04-1
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2025.06.08-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2025.06.08-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_s390x:2025.06.08-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2025.06.08-1
[pypy_x86_64]
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.06.04-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.06.04-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.06.04-1
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.06.08-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.06.08-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.06.08-1
[pypy_i686]
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.06.04-1
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.06.08-1
[pypy_aarch64]
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.06.04-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.06.04-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.06.04-1
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.06.08-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.06.08-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.06.08-1
[armv7l]
manylinux_2_31 = quay.io/pypa/manylinux_2_31_armv7l:2025.06.04-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2025.06.04-1
manylinux_2_31 = quay.io/pypa/manylinux_2_31_armv7l:2025.06.08-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2025.06.08-1
[riscv64]
@@ -179,6 +179,10 @@
"name": "cpython-3.12.11+20250604-s390x-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-s390x-unknown-linux-gnu-install_only.tar.gz"
},
{
"name": "cpython-3.12.11+20250604-x86_64-apple-darwin-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-apple-darwin-install_only.tar.gz"
},
{
"name": "cpython-3.12.11+20250604-x86_64-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-pc-windows-msvc-install_only.tar.gz"
@@ -199,10 +203,6 @@
"name": "cpython-3.12.11+20250604-x86_64_v2-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v2-unknown-linux-musl-install_only.tar.gz"
},
{
"name": "cpython-3.12.11+20250604-x86_64-apple-darwin-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-apple-darwin-install_only.tar.gz"
},
{
"name": "cpython-3.12.11+20250604-x86_64_v3-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v3-unknown-linux-gnu-install_only.tar.gz"
@@ -315,6 +315,10 @@
"name": "cpython-3.14.0b1+20250604-ppc64le-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-ppc64le-unknown-linux-gnu-install_only.tar.gz"
},
{
"name": "cpython-3.14.0b1+20250604-riscv64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-riscv64-unknown-linux-gnu-install_only.tar.gz"
},
{
"name": "cpython-3.14.0b1+20250604-s390x-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-s390x-unknown-linux-gnu-install_only.tar.gz"
@@ -359,10 +363,6 @@
"name": "cpython-3.14.0b1+20250604-x86_64_v4-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v4-unknown-linux-musl-install_only.tar.gz"
},
{
"name": "cpython-3.14.0b1+20250604-riscv64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-riscv64-unknown-linux-gnu-install_only.tar.gz"
},
{
"name": "cpython-3.9.23+20250604-aarch64-apple-darwin-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-aarch64-apple-darwin-install_only.tar.gz"
+9
View File
@@ -18,6 +18,15 @@ If you've used previous versions of the beta:
- ⚠️ Previous betas of v3.0 changed the working directory for tests. This has been rolled back to the v2.x behaviour, so you might need to change configs if you adapted to the beta 1 or 2 behaviour. See [issue #2406](https://github.com/pypa/cibuildwheel/issues/2406) for more information.
- ⚠️ GraalPy shipped with the identifier `gp242-*` in previous betas, this has been changed to `gp311_242-*` to be consistent with other interpreters, and to fix a bug with GraalPy and project requires-python detection. If you were using GraalPy, you might need to update your config to use the new identifier.
- ⚠️ `test-sources` now uses `project` directory instead of the `package` directory (matching the docs).
- ⚠️ 32-bit linux builds were removed from `"auto"` (the default), now require `"auto32"` or explicit archs, as modern manylinux images (including our new default) do not support them.
#### v3.0.0rc3
_11 June 2025_
- 🛠 32-bit linux builds removed from `"auto"`, requires explicit `"auto32"`. (#2458)
- 📚 Warn that `pyodide-version` is experimental. (#2450)
#### v3.0.0rc2
+3 -3
View File
@@ -60,7 +60,7 @@ There are two suggested methods for keeping cibuildwheel up to date that instead
If you use GitHub Actions for builds, you can use cibuildwheel as an action:
```yaml
uses: pypa/cibuildwheel@v3.0.0rc2
uses: pypa/cibuildwheel@v3.0.0rc3
```
This is a composite step that just runs cibuildwheel using pipx. You can set command-line options as `with:` parameters, and use `env:` as normal.
@@ -82,7 +82,7 @@ The second option, and the only one that supports other CI systems, is using a `
```bash
# requirements-cibw.txt
cibuildwheel==3.0.0rc2
cibuildwheel==3.0.0rc3
```
Then your install step would have `python -m pip install -r requirements-cibw.txt` in it. Your `.github/dependabot.yml` file could look like this:
@@ -247,7 +247,7 @@ Solutions to this vary, but the simplest is to use pipx:
# most runners have pipx preinstalled, but in case you don't
python3 -m pip install pipx
pipx run cibuildwheel==3.0.0rc2 --output-dir wheelhouse
pipx run cibuildwheel==3.0.0rc3 --output-dir wheelhouse
pipx run twine upload wheelhouse/*.whl
```
+37 -8
View File
@@ -191,10 +191,10 @@ Options:
- Windows: `AMD64` `x86` `ARM64`
- Pyodide: `wasm32`
- iOS: `arm64_iphoneos` `arm64_iphonesimulator` `x86_64_iphonesimulator`
- `auto`: The default archs for your machine - see the table below.
- `auto64`: Just the 64-bit auto archs
- `auto32`: Just the 32-bit auto archs
- `native`: the native arch of the build machine - Matches [`platform.machine()`](https://docs.python.org/3/library/platform.html#platform.machine).
- `auto`: The recommended archs for your machine - see the table below.
- `auto64`: The 64-bit arch(s) supported by your machine (includes device and simulator for iOS)
- `auto32`: The 32-bit arch supported by your machine
- `native`: the native arch of the build machine - matches [`platform.machine()`](https://docs.python.org/3/library/platform.html#platform.machine).
- `all` : expands to all the architectures supported on this OS. You may want
to use [`build`](#build-skip) with this option to target specific
architectures via build selectors.
@@ -205,16 +205,34 @@ Default: `auto`
| Runner | `native` | `auto` | `auto64` | `auto32` |
|---|---|---|---|---|
| Linux / Intel | `x86_64` | `x86_64` `i686` | `x86_64` | `i686` |
| Windows / Intel | `AMD64` | `AMD64` `x86` | `AMD64` | `x86` |
| Linux / Intel 64-bit | `x86_64` | `x86_64` | `x86_64` | `i686` |
| Linux / Intel 32-bit | `i686` | `i686` | | `i686` |
| Linux / Arm 64-bit | `aarch64` | `aarch64` | `aarch64` | `armv7l`¹ |
| Linux / Arm 32-bit | `armv7l` | `armv7l` | | `armv7l` |
| Windows / Intel 64-bit | `AMD64` | `AMD64` `x86` | `AMD64` | `x86` |
| Windows / Intel 32-bit | `x86` | `x86` | | `x86` |
| Windows / ARM64 | `ARM64` | `ARM64` | `ARM64` | |
| macOS / Intel | `x86_64` | `x86_64` | `x86_64` | |
| macOS / Apple Silicon | `arm64` | `arm64` | `arm64` | |
| iOS on macOS / Intel | `x86_64_iphonesimulator` | `x86_64_iphonesimulator` | `x86_64_iphonesimulator` | |
| iOS on macOS / Apple Silicon | `arm64_iphonesimulator` | `arm64_iphoneos` `arm64_iphonesimulator` | `arm64_iphoneos` `arm64_iphonesimulator` |
¹: This will only be included if the runner supports it.
If not listed above, `auto` is the same as `native`.
!!! warning
The `auto` option only includes 32-bit architectures if they are
commonly built. `cibuildwheel` 3.0 removed 32-bit Linux builds from `auto`,
and a future release may remove 32-bit Windows builds from `auto` as well.
If you know you need them, please include `auto32`. Note that modern
manylinux image do not support 32-bit builds. If you want to avoid 32-bit
Windows builds today, feel free to use `auto64`.
!!! note
Pyodide currently ignores the architecture setting, as it always builds for
`wasm32`.
[setup-qemu-action]: https://github.com/docker/setup-qemu-action
[binfmt]: https://hub.docker.com/r/tonistiigi/binfmt
@@ -238,6 +256,10 @@ This option can also be set using the [command-line option](#command-line)
# On an Linux Intel runner with qemu installed, build Intel and ARM wheels
[tool.cibuildwheel.linux]
archs = ["auto", "aarch64"]
# Build all 32-bit and 64-bit wheels natively buildable on the image
[tool.cibuildwheel]
archs = ["auto64", "auto32"]
```
!!! tab examples "Environment variables"
@@ -250,12 +272,13 @@ This option can also be set using the [command-line option](#command-line)
# On an Linux Intel runner with qemu installed, build Intel and ARM wheels
CIBW_ARCHS_LINUX: "auto aarch64"
# Build all 32-bit and 64-bit wheels natively buildable on the image
CIBW_ARCHS: "auto64 auto32"
```
Separate multiple archs with a space.
It is generally recommended to use the environment variable or
command-line option for Linux, as selecting archs often depends
on your specific runner having qemu installed.
@@ -1253,6 +1276,12 @@ The available Pyodide versions are determined by the version of `pyodide-build`
!!! tip
You can set the version of `pyodide-build` using the [`dependency-versions`](#dependency-versions) option.
!!! warning
This option is considered experimental, and might be converted to a more general mechanism in a future minor cibuildwheel release.
!!! warning
Make sure to scope it to one specific pyodide identifier with overrides if using the `pyodide-prerelease` enable.
#### Examples
!!! tab examples "pyproject.toml"
+6 -6
View File
@@ -71,8 +71,8 @@ title: Working examples
| [mosec][] | ![github icon][] | ![linux icon][] ![apple icon][] | A machine learning model serving framework powered by Rust |
| [Picologging][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A high-performance logging library for Python. |
| [pybind11 cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a CMake-based build system |
| [Rtree][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Rtree: spatial index for Python GIS |
| [markupsafe][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Safely add untrusted strings to HTML/XML markup. |
| [Rtree][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Rtree: spatial index for Python GIS |
| [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Kernel Density Estimation in Python |
| [dd-trace-py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Uses custom alternate arch emulation on GitHub |
| [tgcalls][] | ![github icon][] | ![apple icon][] ![windows icon][] | Python `pybind11` binding to Telegram's WebRTC library with third party dependencies like `OpenSSL`, `MozJPEG`, `FFmpeg`, etc. |
@@ -81,8 +81,8 @@ title: Working examples
| [sourmash][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Quickly search, compare, and analyze genomic and metagenomic data sets. |
| [abess][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A fast best-subset selection library. It uses cibuildwheel to build a large project with C++ extensions. |
| [python-snappy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for the snappy google library |
| [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Python bindings for jq |
| [cyvcf2][] | ![github icon][] | ![apple icon][] ![linux icon][] | cython + htslib == fast VCF and BCF processing |
| [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Python bindings for jq |
| [matrixprofile][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python 3 library making time series data mining tasks, utilizing matrix profile algorithms, accessible to everyone. |
| [Tokenizer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast and customizable text tokenization library with BPE and SentencePiece support |
| [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Jupyter-friendly Python interface for C++ MINUIT2 |
@@ -94,8 +94,8 @@ title: Working examples
| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 |
| [streaming-form-data][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Streaming parser for multipart/form-data written in Cython |
| [power-grid-model][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python/C++ library for distribution power system analysis |
| [bx-python][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. |
| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python |
| [bx-python][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. |
| [boost-histogram][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. |
| [Imagecodecs (fork)][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] | Over 20 external dependencies in compiled libraries, custom docker image, `libomp`, `openblas` and `install_name_tool` for macOS. |
| [Python-WebRTC][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | a Python extension that provides bindings to WebRTC M92 |
@@ -181,8 +181,8 @@ title: Working examples
[mosec]: https://github.com/mosecorg/mosec
[Picologging]: https://github.com/microsoft/picologging
[pybind11 cmake_example]: https://github.com/pybind/cmake_example
[Rtree]: https://github.com/Toblerity/rtree
[markupsafe]: https://github.com/pallets/markupsafe
[Rtree]: https://github.com/Toblerity/rtree
[KDEpy]: https://github.com/tommyod/KDEpy
[dd-trace-py]: https://github.com/DataDog/dd-trace-py
[tgcalls]: https://github.com/MarshalX/tgcalls
@@ -191,8 +191,8 @@ title: Working examples
[sourmash]: https://github.com/sourmash-bio/sourmash
[abess]: https://github.com/abess-team/abess
[python-snappy]: https://github.com/intake/python-snappy
[jq.py]: https://github.com/mwilliamson/jq.py
[cyvcf2]: https://github.com/brentp/cyvcf2
[jq.py]: https://github.com/mwilliamson/jq.py
[matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile
[Tokenizer]: https://github.com/OpenNMT/Tokenizer
[iminuit]: https://github.com/scikit-hep/iminuit
@@ -204,8 +204,8 @@ title: Working examples
[iDynTree]: https://github.com/robotology/idyntree
[streaming-form-data]: https://github.com/siddhantgoel/streaming-form-data
[power-grid-model]: https://github.com/PowerGridModel/power-grid-model
[bx-python]: https://github.com/bxlab/bx-python
[pybase64]: https://github.com/mayeut/pybase64
[bx-python]: https://github.com/bxlab/bx-python
[boost-histogram]: https://github.com/scikit-hep/boost-histogram
[Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build
[Python-WebRTC]: https://github.com/MarshalX/python-webrtc
+6 -6
View File
@@ -1,12 +1,12 @@
jobs:
- job: linux
pool: {vmImage: 'Ubuntu-20.04'}
pool: {vmImage: 'ubuntu-latest'}
steps:
- task: UsePythonVersion@0
- bash: |
set -o errexit
python3 -m pip install --upgrade pip
pip3 install cibuildwheel==3.0.0rc2
pip3 install cibuildwheel==3.0.0rc3
displayName: Install dependencies
- bash: cibuildwheel --output-dir wheelhouse .
displayName: Build wheels
@@ -14,13 +14,13 @@ jobs:
inputs: {pathtoPublish: 'wheelhouse'}
- job: macos
pool: {vmImage: 'macOS-13'}
pool: {vmImage: 'macOS-latest'}
steps:
- task: UsePythonVersion@0
- bash: |
set -o errexit
python3 -m pip install --upgrade pip
python3 -m pip install cibuildwheel==3.0.0rc2
python3 -m pip install cibuildwheel==3.0.0rc3
displayName: Install dependencies
- bash: cibuildwheel --output-dir wheelhouse .
displayName: Build wheels
@@ -28,13 +28,13 @@ jobs:
inputs: {pathtoPublish: wheelhouse}
- job: windows
pool: {vmImage: 'windows-2019'}
pool: {vmImage: 'windows-latest'}
steps:
- task: UsePythonVersion@0
- bash: |
set -o errexit
python -m pip install --upgrade pip
pip install cibuildwheel==3.0.0rc2
pip install cibuildwheel==3.0.0rc3
displayName: Install dependencies
- bash: cibuildwheel --output-dir wheelhouse .
displayName: Build wheels
+3 -3
View File
@@ -11,7 +11,7 @@ jobs:
- run:
name: Build the Linux wheels.
command: |
python3 -m pip install --user cibuildwheel==3.0.0rc2
python3 -m pip install --user cibuildwheel==3.0.0rc3
cibuildwheel --output-dir wheelhouse
- store_artifacts:
path: wheelhouse/
@@ -28,7 +28,7 @@ jobs:
- run:
name: Build the Linux aarch64 wheels.
command: |
python3 -m pip install --user cibuildwheel==3.0.0rc2
python3 -m pip install --user cibuildwheel==3.0.0rc3
python3 -m cibuildwheel --output-dir wheelhouse
- store_artifacts:
path: wheelhouse/
@@ -44,7 +44,7 @@ jobs:
name: Build the OS X wheels.
command: |
sudo softwareupdate --install-rosetta --agree-to-license # for python<=3.8 or x86_64/universal2 tests
pip3 install cibuildwheel==3.0.0rc2
pip3 install cibuildwheel==3.0.0rc3
cibuildwheel --output-dir wheelhouse
- store_artifacts:
path: wheelhouse/
+1 -1
View File
@@ -1,6 +1,6 @@
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
install_cibuildwheel_script:
- python -m pip install cibuildwheel==3.0.0rc2
- python -m pip install cibuildwheel==3.0.0rc3
run_cibuildwheel_script:
- cibuildwheel
wheels_artifacts:
+6 -2
View File
@@ -1,6 +1,6 @@
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
install_cibuildwheel_script:
- python -m pip install cibuildwheel==3.0.0rc2
- python -m pip install cibuildwheel==3.0.0rc3
run_cibuildwheel_script:
- cibuildwheel
wheels_artifacts:
@@ -52,9 +52,13 @@ windows_x86_task:
memory: 4G
install_pre_requirements_script:
- certutil -generateSSTFromWU roots.sst
- certutil -addstore -f root roots.sst
- del roots.sst
- choco install -y --no-progress python3 --version 3.12.4
- refreshenv
- echo PATH=%PATH% >> "%CIRRUS_ENV%"
- powershell -Command "$cleanPath = $env:PATH -replace ';+$', ''; Add-Content -Path $env:CIRRUS_ENV -Value ('PATH=' + $cleanPath)"
<<: *BUILD_AND_STORE_WHEELS
macos_arm64_task:
+1 -1
View File
@@ -44,7 +44,7 @@ jobs:
- uses: actions/checkout@v4
- name: Build wheels
uses: pypa/cibuildwheel@v3.0.0rc2
uses: pypa/cibuildwheel@v3.0.0rc3
env:
CIBW_PLATFORM: ${{ matrix.platform }}
CIBW_ARCHS: ${{ matrix.archs }}
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
- uses: actions/checkout@v4
- name: Build wheels
uses: pypa/cibuildwheel@v3.0.0rc2
uses: pypa/cibuildwheel@v3.0.0rc3
# env:
# CIBW_SOME_OPTION: value
# ...
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
- uses: actions/checkout@v4
- name: Build wheels
run: pipx run cibuildwheel==3.0.0rc2
run: pipx run cibuildwheel==3.0.0rc3
- uses: actions/upload-artifact@v4
with:
+1 -1
View File
@@ -21,7 +21,7 @@ jobs:
platforms: all
- name: Build wheels
uses: pypa/cibuildwheel@v3.0.0rc2
uses: pypa/cibuildwheel@v3.0.0rc3
env:
# configure cibuildwheel on Linux to build native archs ('auto'),
# and to split the remaining architectures between the x86_64 and
+3 -3
View File
@@ -12,7 +12,7 @@ linux:
DOCKER_TLS_CERTDIR: ""
script:
- curl -sSL https://get.docker.com/ | sh
- python -m pip install cibuildwheel==3.0.0rc2
- python -m pip install cibuildwheel==3.0.0rc3
- cibuildwheel --output-dir wheelhouse
artifacts:
paths:
@@ -23,7 +23,7 @@ windows:
before_script:
- choco install python -y --allow-downgrade --version 3.12.4
- choco install git.install -y
- py -m pip install cibuildwheel==3.0.0rc2
- py -m pip install cibuildwheel==3.0.0rc3
script:
- py -m cibuildwheel --output-dir wheelhouse --platform windows
artifacts:
@@ -35,7 +35,7 @@ windows:
macos:
image: macos-14-xcode-15
before_script:
- python3 -m pip install cibuildwheel==3.0.0rc2
- python3 -m pip install cibuildwheel==3.0.0rc3
script:
- python3 -m cibuildwheel --output-dir wheelhouse
artifacts:
+1 -1
View File
@@ -14,7 +14,7 @@ linux:
- curl -sSL https://get.docker.com/ | sh
# Warning: This is extremely slow, be careful with how many wheels you build
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
- python -m pip install cibuildwheel==3.0.0rc2
- python -m pip install cibuildwheel==3.0.0rc3
# Assuming your CI runner's default architecture is x86_64...
- cibuildwheel --output-dir wheelhouse --platform linux --archs aarch64
artifacts:
+1 -1
View File
@@ -20,7 +20,7 @@ jobs:
- ln -s /c/Python312/python.exe /c/Python312/python3.exe
install:
- python3 -m pip install cibuildwheel==3.0.0rc2
- python3 -m pip install cibuildwheel==3.0.0rc3
script:
# build the wheels, put them into './dist'
+1 -1
View File
@@ -26,7 +26,7 @@ jobs:
- ln -s /c/Python312/python.exe /c/Python312/python3.exe
install:
- python3 -m pip install cibuildwheel==3.0.0rc2
- python3 -m pip install cibuildwheel==3.0.0rc3
script:
# build the wheels, put them into './wheelhouse'
+2 -2
View File
@@ -52,7 +52,7 @@ jobs:
- stage: deploy
name: Build and deploy Linux wheels
services: docker
install: python3 -m pip install cibuildwheel==3.0.0rc2 twine
install: python3 -m pip install cibuildwheel==3.0.0rc3 twine
script: python3 -m cibuildwheel --output-dir wheelhouse
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
# Deploy on windows
@@ -60,7 +60,7 @@ jobs:
name: Build and deploy Windows wheels
os: windows
language: shell
install: python3 -m pip install cibuildwheel==3.0.0rc2 twine
install: python3 -m pip install cibuildwheel==3.0.0rc3 twine
script: python3 -m cibuildwheel --output-dir wheelhouse
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
[project]
name = "cibuildwheel"
version = "3.0.0rc2"
version = "3.0.0rc3"
description = "Build Python wheels on CI with minimal configuration."
readme = "README.md"
license = "BSD-2-Clause"
+4
View File
@@ -1,3 +1,4 @@
import socket
import textwrap
from . import test_projects, utils
@@ -24,6 +25,9 @@ def test(tmp_path):
project_dir = tmp_path / "project"
project_with_ssl_tests.generate(project_dir)
# warm up connection
socket.getaddrinfo("tls-v1-2.badssl.com", 443)
actual_wheels = utils.cibuildwheel_run(project_dir)
expected_wheels = utils.expected_wheels("spam", "0.1.0")
+2 -1
View File
@@ -175,6 +175,7 @@ def expected_wheels(
include_universal2: bool = False,
single_python: bool = False,
single_arch: bool = False,
full_auto: bool = False,
) -> list[str]:
"""
Returns the expected wheels from a run of cibuildwheel.
@@ -194,7 +195,7 @@ def expected_wheels(
architectures = [machine_arch]
if not single_arch:
if platform == "linux":
if platform == "linux" and full_auto:
if machine_arch == "x86_64":
architectures.append("i686")
elif (
+22 -3
View File
@@ -34,8 +34,8 @@ def test_arch_auto(platform_machine):
arch_set = Architecture.auto_archs("linux")
expected = {
"32": {Architecture.i686},
"64": {Architecture.x86_64, Architecture.i686},
"arm": {Architecture.aarch64, Architecture.armv7l},
"64": {Architecture.x86_64},
"arm": {Architecture.aarch64},
}
assert arch_set == expected[machine_name]
@@ -94,5 +94,24 @@ def test_arch_auto_no_aarch32(monkeypatch):
arch_set = Architecture.parse_config("auto64", "linux")
assert arch_set == {Architecture.aarch64}
monkeypatch.setattr(cibuildwheel.architecture, "_check_aarch32_el0", lambda: True)
arch_set = Architecture.parse_config("auto32", "linux")
assert len(arch_set) == 0
assert arch_set == {Architecture.armv7l}
monkeypatch.setattr(cibuildwheel.architecture, "_check_aarch32_el0", lambda: False)
arch_set = Architecture.parse_config("auto32", "linux")
assert arch_set == set()
def test_arch_native_on_ios(monkeypatch):
monkeypatch.setattr(sys, "platform", "darwin")
monkeypatch.setattr(platform_module, "machine", lambda: "arm64")
arch_set = Architecture.parse_config("native", platform="ios")
assert arch_set == {Architecture.arm64_iphonesimulator}
def test_arch_auto_on_ios(monkeypatch):
monkeypatch.setattr(sys, "platform", "darwin")
monkeypatch.setattr(platform_module, "machine", lambda: "arm64")
arch_set = Architecture.parse_config("auto", platform="ios")
assert arch_set == {Architecture.arm64_iphonesimulator, Architecture.arm64_iphoneos}
+1 -1
View File
@@ -79,7 +79,7 @@ def test_archs_default(platform, intercepted_build_args):
options = intercepted_build_args.args[0]
if platform == "linux":
assert options.globals.architectures == {Architecture.x86_64, Architecture.i686}
assert options.globals.architectures == {Architecture.x86_64}
elif platform == "windows":
assert options.globals.architectures == {Architecture.AMD64, Architecture.x86}
else:
+2
View File
@@ -51,6 +51,7 @@ def mock_build_container(monkeypatch):
@pytest.mark.usefixtures("mock_build_container", "fake_package_dir")
def test_build_default_launches(monkeypatch):
monkeypatch.setattr(sys, "argv", [*sys.argv, "--platform=linux"])
monkeypatch.setenv("CIBW_ARCHS", "auto64 auto32")
monkeypatch.delenv("CIBW_ENABLE", raising=False)
main()
@@ -105,6 +106,7 @@ def test_build_with_override_launches(monkeypatch, tmp_path):
manylinux-x86_64-image = "manylinux_2_28"
musllinux-x86_64-image = "musllinux_1_2"
enable = ["pypy", "pypy-eol", "graalpy", "cpython-freethreading"]
archs = ["auto64", "auto32"]
# Before Python 3.10, use manylinux2014
[[tool.cibuildwheel.overrides]]
+1
View File
@@ -25,6 +25,7 @@ PYPROJECT_1 = """
[tool.cibuildwheel]
build = ["cp38-*", "cp313-*"]
skip = ["*musllinux*"]
archs = ["auto64", "auto32"]
environment = {FOO="BAR"}
test-command = "pyproject"