Compare commits
19
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
29d36dc17d | ||
|
|
a9f58eb656 | ||
|
|
545670cbf5 | ||
|
|
32b0ccc560 | ||
|
|
f86700db67 | ||
|
|
46558a4e24 | ||
|
|
023f45a968 | ||
|
|
1d5d9be23f | ||
|
|
a42e5d3563 | ||
|
|
d97b262640 | ||
|
|
58977c129d | ||
|
|
075b5c8881 | ||
|
|
3c2956fe9b | ||
|
|
3dcb54150e | ||
|
|
e2027266cd | ||
|
|
314d2268ab | ||
|
|
b7e8713e11 | ||
|
|
2f9518f182 | ||
|
|
8d75eb7a82 |
-91
@@ -1,91 +0,0 @@
|
||||
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 -U pip
|
||||
- python -m pip install -e. --group test
|
||||
run_cibuildwheel_tests_script:
|
||||
- python ./bin/run_tests.py
|
||||
|
||||
linux_x86_task:
|
||||
timeout_in: 120m
|
||||
compute_engine_instance:
|
||||
image_project: cirrus-images
|
||||
image: family/docker-builder
|
||||
platform: linux
|
||||
cpu: 8
|
||||
memory: 8G
|
||||
env:
|
||||
VENV_ROOT: ${HOME}/venv-cibuildwheel
|
||||
PATH: ${VENV_ROOT}/bin:${PATH}
|
||||
install_pre_requirements_script:
|
||||
- docker run --rm --privileged docker.io/tonistiigi/binfmt:latest --install all
|
||||
- add-apt-repository -y ppa:deadsnakes/ppa
|
||||
- apt-get update
|
||||
- apt-get install -y python3.12-venv
|
||||
- python3.12 -m venv ${VENV_ROOT}
|
||||
<<: *RUN_TESTS
|
||||
|
||||
linux_aarch64_task:
|
||||
compute_engine_instance:
|
||||
image_project: cirrus-images
|
||||
image: family/docker-builder-arm64
|
||||
architecture: arm64
|
||||
platform: linux
|
||||
cpu: 4
|
||||
memory: 4G
|
||||
env:
|
||||
VENV_ROOT: ${HOME}/venv-cibuildwheel
|
||||
PATH: ${VENV_ROOT}/bin:${PATH}
|
||||
install_pre_requirements_script:
|
||||
- docker run --rm --privileged docker.io/tonistiigi/binfmt:latest --install all
|
||||
- add-apt-repository -y ppa:deadsnakes/ppa
|
||||
- apt-get update
|
||||
- apt-get install -y python3.12-venv
|
||||
- python3.12 -m venv ${VENV_ROOT}
|
||||
<<: *RUN_TESTS
|
||||
|
||||
windows_x86_task:
|
||||
# The task takes ~55 minutes while the timeout happens after 60 minutes by default,
|
||||
# let's allow some wiggle room.
|
||||
timeout_in: 120m
|
||||
windows_container:
|
||||
image: cirrusci/windowsservercore:visualstudio2022
|
||||
cpu: 8
|
||||
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
|
||||
- powershell -Command "$cleanPath = $env:PATH -replace ';+$', ''; Add-Content -Path $env:CIRRUS_ENV -Value ('PATH=' + $cleanPath)"
|
||||
<<: *RUN_TESTS
|
||||
|
||||
macos_arm64_task:
|
||||
macos_instance:
|
||||
image: ghcr.io/cirruslabs/macos-runner:sequoia
|
||||
env:
|
||||
VENV_ROOT: ${HOME}/venv-cibuildwheel
|
||||
PATH: ${VENV_ROOT}/bin:${PATH}
|
||||
install_pre_requirements_script:
|
||||
- brew install python@3.12
|
||||
- python3.12 -m venv ${VENV_ROOT}
|
||||
<<: *RUN_TESTS
|
||||
|
||||
macos_arm64_cp38_task:
|
||||
macos_instance:
|
||||
image: ghcr.io/cirruslabs/macos-runner:sequoia
|
||||
env:
|
||||
VENV_ROOT: ${HOME}/venv-cibuildwheel
|
||||
PATH: ${VENV_ROOT}/bin:${PATH}
|
||||
PYTEST_ADDOPTS: --run-cp38-universal2 -k 'test_cp38_arm64_testing_universal2_installer or test_arch_auto or test_dummy_serial'
|
||||
install_pre_requirements_script:
|
||||
- brew install python@3.12
|
||||
- python3.12 -m venv ${VENV_ROOT}
|
||||
- curl -fsSLO https://www.python.org/ftp/python/3.8.10/python-3.8.10-macos11.pkg
|
||||
- sudo installer -pkg python-3.8.10-macos11.pkg -target /
|
||||
- rm python-3.8.10-macos11.pkg
|
||||
- sh "/Applications/Python 3.8/Install Certificates.command"
|
||||
<<: *RUN_TESTS
|
||||
@@ -17,7 +17,7 @@ jobs:
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- uses: hynek/build-and-inspect-python-package@efb823f52190ad02594531168b7a2d5790e66516 # v2.14.0
|
||||
- uses: hynek/build-and-inspect-python-package@fe0a0fb1925ca263d076ca4f2c13e93a6e92a33e # v2.17.0
|
||||
|
||||
publish:
|
||||
needs: [dist]
|
||||
@@ -41,6 +41,6 @@ jobs:
|
||||
with:
|
||||
subject-path: "dist/cibuildwheel-*"
|
||||
|
||||
- uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
|
||||
- uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
|
||||
with:
|
||||
attestations: true
|
||||
|
||||
+11
-13
@@ -43,14 +43,12 @@ jobs:
|
||||
with:
|
||||
persist-credentials: false
|
||||
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||
id: python
|
||||
with:
|
||||
python-version: "3.x"
|
||||
- uses: j178/prek-action@79f765515bd648eb4d6bb1b17277b7cb22cb6468 # v2.0.0
|
||||
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
||||
- uses: j178/prek-action@cbc2f23eb5539cf20d82d1aabd0d0ecbcc56f4e3 # v2.0.2
|
||||
- name: PyLint checks
|
||||
run: pipx run --python "${STEPS_PYTHON_OUTPUTS_PYTHON_PATH}" nox -s pylint -- --output-format=github
|
||||
env:
|
||||
STEPS_PYTHON_OUTPUTS_PYTHON_PATH: ${{ steps.python.outputs.python-path }}
|
||||
run: uvx nox -s pylint -- --output-format=github
|
||||
|
||||
sample:
|
||||
name: Generate a sample project
|
||||
@@ -64,12 +62,12 @@ jobs:
|
||||
name: Install Python
|
||||
with:
|
||||
python-version: "3.x"
|
||||
- uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
|
||||
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
||||
- name: Install dependencies
|
||||
run: uv sync --no-dev --group test
|
||||
- name: Generate a sample project
|
||||
run: uv run --no-sync -m test.test_projects test.test_0_basic.basic_project sample_proj
|
||||
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
||||
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||
with:
|
||||
name: sample_proj
|
||||
path: sample_proj
|
||||
@@ -89,7 +87,7 @@ jobs:
|
||||
- os: ubuntu-latest
|
||||
python_version: '3.14'
|
||||
- os: ubuntu-latest
|
||||
python_version: '3.13'
|
||||
python_version: '3.14'
|
||||
test_select: android
|
||||
- os: ubuntu-24.04-arm
|
||||
python_version: '3.13'
|
||||
@@ -128,7 +126,7 @@ jobs:
|
||||
python-version: ${{ matrix.python_version }}
|
||||
allow-prereleases: true
|
||||
|
||||
- uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
|
||||
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
||||
|
||||
- name: Free up disk space
|
||||
if: runner.os == 'Linux' && matrix.test_select != 'android'
|
||||
@@ -232,7 +230,7 @@ jobs:
|
||||
run: |
|
||||
test $(find wheelhouse_only -name '*.whl' | wc -l) -eq 1
|
||||
|
||||
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
||||
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
||||
with:
|
||||
name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }}
|
||||
path: wheelhouse/*.whl
|
||||
@@ -255,7 +253,7 @@ jobs:
|
||||
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||
with:
|
||||
python-version: "3.x"
|
||||
- uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
|
||||
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
||||
- name: Install dependencies
|
||||
run: uv sync --no-dev --group test
|
||||
- name: Get qemu emulated architectures
|
||||
@@ -280,7 +278,7 @@ jobs:
|
||||
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||
with:
|
||||
python-version: "3.x"
|
||||
- uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
|
||||
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
||||
- name: Install dependencies
|
||||
run: uv sync --no-dev --group test
|
||||
|
||||
@@ -305,7 +303,7 @@ jobs:
|
||||
name: Install Python 3.12
|
||||
with:
|
||||
python-version: '3.12'
|
||||
- uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
|
||||
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
||||
|
||||
- name: Install dependencies
|
||||
run: uv sync --no-dev --group test
|
||||
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
|
||||
# we use this step to grab a Github App auth token, so that PRs generated by this workflow
|
||||
# run the GHA tests.
|
||||
- uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859 # v3.0.0
|
||||
- uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
|
||||
id: generate-token
|
||||
if: github.ref == 'refs/heads/main' && github.repository == 'pypa/cibuildwheel'
|
||||
with:
|
||||
@@ -39,18 +39,20 @@ jobs:
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- uses: wntrblm/nox@5a277b752f6094150e25237d47c34168e2b7526e # 2026.02.09
|
||||
- uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
||||
with:
|
||||
python-version: "3.14"
|
||||
|
||||
- name: "Run update: dependencies"
|
||||
run: nox --force-color -s update_constraints
|
||||
run: uvx nox --force-color -s update_constraints
|
||||
- name: "Run update: python configs"
|
||||
run: nox --force-color -s update_pins
|
||||
run: uvx nox --force-color -s update_pins
|
||||
- name: "Run update: docs user projects"
|
||||
run: nox --force-color -s update_proj -- --auth=${{ secrets.GITHUB_TOKEN }}
|
||||
run: uvx nox --force-color -s update_proj -- --auth=${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Create Pull Request
|
||||
if: github.ref == 'refs/heads/main' && github.repository == 'pypa/cibuildwheel'
|
||||
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0
|
||||
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
|
||||
with:
|
||||
commit-message: Update dependencies
|
||||
title: '[Bot] Update dependencies'
|
||||
|
||||
@@ -21,4 +21,4 @@ jobs:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Run zizmor 🌈
|
||||
uses: zizmorcore/zizmor-action@71321a20a9ded102f6e9ce5718a2fcec2c4f70d8 # v0.5.2
|
||||
uses: zizmorcore/zizmor-action@b1d7e1fb5de872772f31590499237e7cce841e8e # v0.5.3
|
||||
|
||||
@@ -14,21 +14,22 @@ repos:
|
||||
exclude: (cibuildwheel/resources/pinned_docker_images.cfg)|(.svg$)
|
||||
- id: mixed-line-ending
|
||||
- id: trailing-whitespace
|
||||
exclude: ^cibuildwheel/resources/android/android.patch$
|
||||
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
rev: 4924b0e01e032fea073ad04a1c5cfa7e4add0afb # frozen: v0.15.6
|
||||
rev: c60c980e561ed3e73101667fe8365c609d19a438 # frozen: v0.15.9
|
||||
hooks:
|
||||
- id: ruff-check
|
||||
args: ["--fix"]
|
||||
- id: ruff-format
|
||||
|
||||
- repo: https://github.com/pre-commit/mirrors-mypy
|
||||
rev: a66e98df7b4aeeb3724184b332785976d062b92e # frozen: v1.19.1
|
||||
rev: 8e5c80792e2ec0c87804d8ef915bf35e2caea6da # frozen: v1.20.0
|
||||
hooks:
|
||||
- id: mypy
|
||||
name: mypy 3.11 on cibuildwheel/
|
||||
args: ["--python-version=3.11"]
|
||||
exclude: ^cibuildwheel/resources/_cross_venv.py$ # Requires Python 3.13 or later
|
||||
exclude: ^cibuildwheel/resources/android/_cross_venv.py$ # Requires Python 3.13 or later
|
||||
additional_dependencies: &mypy-dependencies
|
||||
- bracex
|
||||
- build
|
||||
@@ -85,7 +86,7 @@ repos:
|
||||
|
||||
|
||||
- repo: https://github.com/python-jsonschema/check-jsonschema
|
||||
rev: 9f48a48aa91a6040d749ad68ec70907d907a5a7f # frozen: 0.37.0
|
||||
rev: ed81924a8b1cecdaa570b072528fa80c9c4d6ccd # frozen: 0.37.1
|
||||
hooks:
|
||||
- id: check-dependabot
|
||||
- id: check-github-actions
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
This is a summary of the host Python versions and platforms covered by the different CI platforms:
|
||||
|
||||
| | 3.11 | 3.12 | 3.13 | 3.14 |
|
||||
|---------|----------------------------------|---------------------------------|----------------|----------------|
|
||||
| Linux | Azure Pipelines / GitHub Actions | CircleCI¹ / Cirrus CI / GitLab¹ | GitHub Actions | GitHub Actions |
|
||||
| macOS | Azure Pipelines | CircleCI¹ / Cirrus CI / GitLab¹ | GitHub Actions | |
|
||||
| Windows | Azure Pipelines | Cirrus CI / GitLab¹ | GitHub Actions | |
|
||||
| | 3.11 | 3.12 | 3.13 | 3.14 |
|
||||
|---------|----------------------------------|-----------------------|----------------|----------------|
|
||||
| Linux | Azure Pipelines / GitHub Actions | CircleCI¹ / GitLab¹ | GitHub Actions | GitHub Actions |
|
||||
| macOS | Azure Pipelines | CircleCI¹ / GitLab¹ | GitHub Actions | |
|
||||
| Windows | Azure Pipelines | GitLab¹ | GitHub Actions | |
|
||||
|
||||
> ¹ Runs a reduced set of tests to reduce CI load
|
||||
|
||||
@@ -22,30 +22,30 @@ What does it do?
|
||||
|
||||
While cibuildwheel itself requires a recent Python version to run (we support the last three releases), it can target the following versions to build wheels:
|
||||
|
||||
| | 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 | Android | iOS | Pyodide |
|
||||
|--------------------|----|-----|----|-----|-----|----|-----|----|-----|-----|---|-----|-----|-----|
|
||||
| CPython 3.8 | ✅ | ✅ | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | N/A |
|
||||
| CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | N/A |
|
||||
| CPython 3.10 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | N/A |
|
||||
| CPython 3.11 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | N/A |
|
||||
| CPython 3.12 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | N/A | N/A | ✅⁴ |
|
||||
| CPython 3.13³ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | ✅ | ✅ | ✅⁴ |
|
||||
| CPython 3.14 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | ✅⁵ | ✅ | ✅ | N/A |
|
||||
| PyPy 3.8 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | 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 | N/A | N/A |
|
||||
| PyPy 3.10 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
|
||||
| PyPy 3.11 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
|
||||
| GraalPy 3.11 v24.2 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | N/A | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
|
||||
| GraalPy 3.12 v25.0 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | N/A | ✅¹ | N/A | N/A | N/A | N/A | N/A | N/A |
|
||||
| | 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 | Android | iOS | Pyodide |
|
||||
| ------------------------ | ----------- | ------------------- | ------------- | ------------- | -------------- | ------------------------------ | ---------------------------- | ------------------------------- | ------------------------------- | ----------------------------- | ------------------------------ | ------- | --- | -------------- |
|
||||
| CPython 3.8 | ✅ | ✅ | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | ✅<sup>5</sup> | N/A | N/A | N/A |
|
||||
| CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅<sup>2</sup> | ✅ | ✅ | ✅ | ✅ | ✅ | ✅<sup>5</sup> | N/A | N/A | N/A |
|
||||
| CPython 3.10 | ✅ | ✅ | ✅ | ✅ | ✅<sup>2</sup> | ✅ | ✅ | ✅ | ✅ | ✅ | ✅<sup>5</sup> | N/A | N/A | N/A |
|
||||
| CPython 3.11 | ✅ | ✅ | ✅ | ✅ | ✅<sup>2</sup> | ✅ | ✅ | ✅ | ✅ | ✅ | ✅<sup>5</sup> | N/A | N/A | N/A |
|
||||
| CPython 3.12 | ✅ | ✅ | ✅ | ✅ | ✅<sup>2</sup> | ✅ | ✅ | ✅ | ✅ | ✅ | ✅<sup>5</sup> | N/A | N/A | ✅<sup>4</sup> |
|
||||
| CPython 3.13<sup>3</sup> | ✅ | ✅ | ✅ | ✅ | ✅<sup>2</sup> | ✅ | ✅ | ✅ | ✅ | ✅ | ✅<sup>5</sup> | ✅ | ✅ | ✅<sup>4</sup> |
|
||||
| CPython 3.14 | ✅ | ✅ | ✅ | ✅ | ✅<sup>2</sup> | ✅ | ✅ | ✅ | ✅ | ✅ | ✅<sup>5</sup> | ✅ | ✅ | N/A |
|
||||
| PyPy 3.8 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅<sup>1</sup> | ✅<sup>1</sup> | ✅<sup>1</sup> | N/A | N/A | N/A | N/A | N/A | N/A |
|
||||
| PyPy 3.9 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅<sup>1</sup> | ✅<sup>1</sup> | ✅<sup>1</sup> | N/A | N/A | N/A | N/A | N/A | N/A |
|
||||
| PyPy 3.10 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅<sup>1</sup> | ✅<sup>1</sup> | ✅<sup>1</sup> | N/A | N/A | N/A | N/A | N/A | N/A |
|
||||
| PyPy 3.11 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅<sup>1</sup> | ✅<sup>1</sup> | ✅<sup>1</sup> | N/A | N/A | N/A | N/A | N/A | N/A |
|
||||
| GraalPy 3.11 v24.2 | ✅ | ✅ | ✅ | N/A | N/A | ✅<sup>1</sup> | N/A | ✅<sup>1</sup> | N/A | N/A | N/A | N/A | N/A | N/A |
|
||||
| GraalPy 3.12 v25.0 | ✅ | ✅ | ✅ | N/A | N/A | ✅<sup>1</sup> | N/A | ✅<sup>1</sup> | N/A | N/A | N/A | N/A | N/A | N/A |
|
||||
|
||||
<sup>¹ PyPy & GraalPy are only supported for manylinux wheels.</sup><br>
|
||||
<sup>² Windows arm64 support is experimental.</sup><br>
|
||||
<sup>³ Free-threaded mode requires opt-in on 3.13 using [`enable`](https://cibuildwheel.pypa.io/en/stable/options/#enable).</sup><br>
|
||||
<sup>⁴ Experimental, not yet supported on PyPI, but can be used directly in web deployment. Use `--platform pyodide` to build.</sup><br>
|
||||
<sup>⁵ manylinux armv7l support is experimental. As there are no RHEL based image for this architecture, it's using an Ubuntu based image instead.</sup><br>
|
||||
<sup>**1** PyPy & GraalPy are only supported for manylinux wheels.</sup><br>
|
||||
<sup>**2** Windows arm64 support is experimental.</sup><br>
|
||||
<sup>**3** Free-threaded mode requires opt-in on 3.13 using [`enable`](https://cibuildwheel.pypa.io/en/stable/options/#enable).</sup><br>
|
||||
<sup>**4** Experimental, not yet supported on PyPI, but can be used directly in web deployment. Use `--platform pyodide` to build.</sup><br>
|
||||
<sup>**5** manylinux armv7l support is experimental. As there are no RHEL based image for this architecture, it's using an Ubuntu based image instead.</sup><br>
|
||||
|
||||
- Builds manylinux, musllinux, macOS, and Windows wheels for CPython, PyPy, and GraalPy
|
||||
- Works on GitHub Actions, Azure Pipelines, CircleCI, GitLab CI, and Cirrus CI
|
||||
- Works on GitHub Actions, Azure Pipelines, CircleCI, and GitLab CI
|
||||
- Bundles shared library dependencies on Linux and macOS through [auditwheel](https://github.com/pypa/auditwheel) and [delocate](https://github.com/matthew-brett/delocate)
|
||||
- Runs your library's tests against the wheel-installed version of your library
|
||||
|
||||
@@ -56,18 +56,18 @@ Usage
|
||||
|
||||
`cibuildwheel` runs inside a CI service. Supported platforms depend on which service you're using:
|
||||
|
||||
| | Linux | macOS | Windows | Linux ARM | macOS ARM | Windows ARM | Android | iOS |
|
||||
|-----------------|-------|-------|---------|-----------|-----------|-------------|---------|-----|
|
||||
| GitHub Actions | ✅ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅⁴ | ✅³ |
|
||||
| Azure Pipelines | ✅ | ✅ | ✅ | | ✅ | ✅² | ✅⁴ | ✅³ |
|
||||
| CircleCI | ✅ | ✅ | | ✅ | ✅ | | ✅⁴ | ✅³ |
|
||||
| Gitlab CI | ✅ | ✅ | ✅ | ✅¹ | ✅ | | ✅⁴ | ✅³ |
|
||||
| Cirrus CI | ✅ | ✅ | ✅ | ✅ | ✅ | | ✅⁴ | |
|
||||
| | Linux | macOS | Windows | Linux ARM | macOS ARM | Windows ARM | Android | iOS | Pyodide |
|
||||
| --------------- | ----- | ----- | ------- | -------------- | --------- | -------------- | -------------------------- | -------------------------- | -------------- |
|
||||
| GitHub Actions | ✅ | ✅ | ✅ | ✅ | ✅ | ✅<sup>2</sup> | ✅<sup>4</sup> | ✅<sup>3</sup> | ✅ |
|
||||
| Azure Pipelines | ✅ | ✅ | ✅ | | ✅ | ✅<sup>2</sup> | ✅<sup>4</sup> | ✅<sup>3</sup> | ✅<sup>5</sup> |
|
||||
| CircleCI | ✅ | ✅ | | ✅ | ✅ | | ✅<sup>4</sup><sup>5</sup> | ✅<sup>3</sup><sup>5</sup> | ✅<sup>5</sup> |
|
||||
| GitLab CI | ✅ | ✅ | ✅ | ✅<sup>1</sup> | ✅ | | ✅<sup>4</sup><sup>5</sup> | ✅<sup>3</sup><sup>5</sup> | ✅<sup>5</sup> |
|
||||
|
||||
<sup>¹ [Requires emulation](https://cibuildwheel.pypa.io/en/stable/faq/#emulation), distributed separately. Other services may also support Linux ARM through emulation or third-party build hosts, but these are not tested in our CI.</sup><br>
|
||||
<sup>² [Uses cross-compilation](https://cibuildwheel.pypa.io/en/stable/faq/#windows-arm64). It is not possible to test `arm64` on this CI platform.</sup><br>
|
||||
<sup>³ Requires a macOS runner; runs tests on the simulator for the runner's architecture. </sup><br>
|
||||
<sup>⁴ Building for Android requires the runner to be Linux x86_64, macOS ARM64 or macOS x86_64. Testing has [additional requirements](https://cibuildwheel.pypa.io/en/stable/platforms/#android).</sup><br>
|
||||
<sup>**1** [Requires emulation](https://cibuildwheel.pypa.io/en/stable/faq/#emulation), distributed separately. Other services may also support Linux ARM through emulation or third-party build hosts, but these are not tested in our CI.</sup><br>
|
||||
<sup>**2** [Uses cross-compilation](https://cibuildwheel.pypa.io/en/stable/faq/#windows-arm64). It is not possible to test `arm64` on this CI platform.</sup><br>
|
||||
<sup>**3** Requires a macOS runner; runs tests on the simulator for the runner's architecture. </sup><br>
|
||||
<sup>**4** Building for Android requires the runner to be Linux x86_64, macOS ARM64 or macOS x86_64. Testing has [additional requirements](https://cibuildwheel.pypa.io/en/stable/platforms/#android).</sup><br>
|
||||
<sup>**5** Builds may work, but are untested in cibuildwheel's CI.</sup><br>
|
||||
|
||||
<!--intro-end-->
|
||||
|
||||
@@ -185,16 +185,16 @@ Here are some repos that use cibuildwheel.
|
||||
|
||||
| Name | CI | OS | Notes |
|
||||
|-----------------------------------|----|----|:------|
|
||||
| [scikit-learn][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The machine learning library. A complex but clean config using many of cibuildwheel's features to build a large project with Cython and C++ extensions. |
|
||||
| [scikit-learn][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![pyodide icon][] | The machine learning library. A complex but clean config using many of cibuildwheel's features to build a large project with Cython and C++ extensions. |
|
||||
| [duckdb][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | DuckDB is an analytical in-process SQL database management system |
|
||||
| [pytorch-fairseq][] | ![github icon][] | ![apple icon][] ![linux icon][] | Facebook AI Research Sequence-to-Sequence Toolkit written in Python. |
|
||||
| [NumPy][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The fundamental package for scientific computing with Python. |
|
||||
| [NumPy][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![pyodide icon][] | The fundamental package for scientific computing with Python. |
|
||||
| [NCNN][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | ncnn is a high-performance neural network inference framework optimized for the mobile platform |
|
||||
| [Matplotlib][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The venerable Matplotlib, a Python library with C++ portions |
|
||||
| [Matplotlib][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![pyodide icon][] | The venerable Matplotlib, a Python library with C++ portions |
|
||||
| [Tornado][] | ![github icon][] | ![linux icon][] ![apple icon][] ![windows icon][] | Tornado is a Python web framework and asynchronous networking library. Uses stable ABI for a small C extension. |
|
||||
| [MyPy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | The compiled version of MyPy using MyPyC. |
|
||||
| [Prophet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Tool for producing high quality forecasts for time series data that has multiple seasonality with linear or non-linear growth. |
|
||||
| [Kivy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Open source UI framework written in Python, running on Windows, Linux, macOS, Android and iOS |
|
||||
| [Triton][] | ![github icon][] | ![linux icon][] | Self hosted runners |
|
||||
|
||||
[scikit-learn]: https://github.com/scikit-learn/scikit-learn
|
||||
[duckdb]: https://github.com/duckdb/duckdb
|
||||
@@ -205,17 +205,19 @@ Here are some repos that use cibuildwheel.
|
||||
[Tornado]: https://github.com/tornadoweb/tornado
|
||||
[MyPy]: https://github.com/mypyc/mypy_mypyc-wheels
|
||||
[Prophet]: https://github.com/facebook/prophet
|
||||
[Kivy]: https://github.com/kivy/kivy
|
||||
[Triton]: https://github.com/openai/triton
|
||||
|
||||
[github icon]: docs/data/readme_icons/github.svg
|
||||
[azurepipelines icon]: docs/data/readme_icons/azurepipelines.svg
|
||||
[circleci icon]: docs/data/readme_icons/circleci.svg
|
||||
[gitlab icon]: docs/data/readme_icons/gitlab.svg
|
||||
[travisci icon]: docs/data/readme_icons/travisci.svg
|
||||
[cirrusci icon]: docs/data/readme_icons/cirrusci.svg
|
||||
[windows icon]: docs/data/readme_icons/windows.svg
|
||||
[apple icon]: docs/data/readme_icons/apple.svg
|
||||
[linux icon]: docs/data/readme_icons/linux.svg
|
||||
[android icon]: docs/data/readme_icons/android.svg
|
||||
[ios icon]: docs/data/readme_icons/ios.svg
|
||||
[pyodide icon]: docs/data/readme_icons/pyodide.svg
|
||||
|
||||
<!-- END bin/projects.py -->
|
||||
|
||||
@@ -252,6 +254,7 @@ _5 March 2026_
|
||||
- 🌟 You can now build wheels using `uv` as a build frontend. This should improve performance, especially if your project has lots of build dependencies. To use, set [`build-frontend`](https://cibuildwheel.pypa.io/en/stable/options/#build-frontend) to `uv`. (#2322)
|
||||
- ⚠️ We no longer support running on Travis CI. It may continue working but we don't run tests there anymore so we can't be sure. (#2682)
|
||||
- ✨ Improvements to building rust wheels on Android (#2650)
|
||||
- 🛠 Update Pyodide to 0.29.3 (#2719, #2733)
|
||||
- 🐛 Fix bug with the GitHub Action on Windows, where PATH was getting unnecessarily changed, causing issues with meson builds. (#2723)
|
||||
- ✨ Add support for quiet setting on `build` and `uv` from the cibuildwheel `build-verbosity` setting. (#2737)
|
||||
- 📚 Docs updates, including guidance on using Meson on Windows (#2718)
|
||||
@@ -284,7 +287,7 @@ _12 October 2025_
|
||||
- 🐛 Fix the default MACOSX_DEPLOYMENT_TARGET on Python 3.14 (#2613)
|
||||
- 📚 Docs improvements (#2617)
|
||||
|
||||
<!-- [[[end]]] (sum: NOLMd9iLDC) -->
|
||||
<!-- [[[end]]] (sum: h5X+wOmWfI) -->
|
||||
|
||||
---
|
||||
|
||||
@@ -311,11 +314,11 @@ Core:
|
||||
- Matthieu Darbois [@mayeut](https://github.com/mayeut)
|
||||
- Henry Schreiner [@henryiii](https://github.com/henryiii)
|
||||
- Grzegorz Bokota [@Czaki](https://github.com/Czaki)
|
||||
- Agriya Khetarpal [@agriyakhetarpal](https://github.com/agriyakhetarpal) (also Pyodide)
|
||||
|
||||
Platform maintainers:
|
||||
|
||||
- Russell Keith-Magee [@freakboy3742](https://github.com/freakboy3742) (iOS)
|
||||
- Agriya Khetarpal [@agriyakhetarpal](https://github.com/agriyakhetarpal) (Pyodide)
|
||||
- Hood Chatham [@hoodmane](https://github.com/hoodmane) (Pyodide)
|
||||
- Gyeongjae Choi [@ryanking13](https://github.com/ryanking13) (Pyodide)
|
||||
- Tim Felgentreff [@timfel](https://github.com/timfel) (GraalPy)
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
# /// script
|
||||
# dependencies = ["click", "packaging", "prek"]
|
||||
|
||||
@@ -1,4 +1,14 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
# /// script
|
||||
# dependencies = [
|
||||
# "click",
|
||||
# "cibuildwheel",
|
||||
# ]
|
||||
#
|
||||
# [tool.uv.sources]
|
||||
# cibuildwheel = { path = ".." }
|
||||
# ///
|
||||
|
||||
import sys
|
||||
import textwrap
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env -S uv run -q
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
# /// script
|
||||
# dependencies = ["pyyaml"]
|
||||
|
||||
@@ -1,4 +1,17 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
# /// script
|
||||
# dependencies = [
|
||||
# "click",
|
||||
# "pygithub",
|
||||
# "pyyaml",
|
||||
# "rich",
|
||||
# "cibuildwheel",
|
||||
# ]
|
||||
#
|
||||
# [tool.uv.sources]
|
||||
# cibuildwheel = { path = ".." }
|
||||
# ///
|
||||
|
||||
"""
|
||||
Check known projects for usage of requires-python.
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
# /// script
|
||||
# dependencies = [
|
||||
# "click",
|
||||
# ]
|
||||
# ///
|
||||
|
||||
|
||||
import os
|
||||
|
||||
+14
-6
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
# /// script
|
||||
# dependencies = [
|
||||
@@ -20,6 +20,7 @@ Suggested usage:
|
||||
import builtins
|
||||
import functools
|
||||
import textwrap
|
||||
import urllib.error
|
||||
import urllib.request
|
||||
import xml.dom.minidom
|
||||
from collections.abc import Iterable, Mapping, Sequence
|
||||
@@ -30,7 +31,7 @@ from typing import Any, Self, TextIO
|
||||
|
||||
import click
|
||||
import yaml
|
||||
from github import Github, GithubException
|
||||
from github import Auth, Github, GithubException
|
||||
|
||||
ICONS = (
|
||||
"github",
|
||||
@@ -38,10 +39,12 @@ ICONS = (
|
||||
"circleci",
|
||||
"gitlab",
|
||||
"travisci",
|
||||
"cirrusci",
|
||||
"windows",
|
||||
"apple",
|
||||
"linux",
|
||||
"android",
|
||||
"ios",
|
||||
"pyodide",
|
||||
)
|
||||
|
||||
|
||||
@@ -130,8 +133,13 @@ class Project:
|
||||
|
||||
def fetch_icon(icon_name: str) -> None:
|
||||
url = f"https://cdn.jsdelivr.net/npm/simple-icons@v4/icons/{icon_name}.svg"
|
||||
with urllib.request.urlopen(url) as f:
|
||||
original_svg_data = f.read()
|
||||
try:
|
||||
with urllib.request.urlopen(url) as f:
|
||||
original_svg_data = f.read()
|
||||
except urllib.error.HTTPError as e:
|
||||
if e.code == 404 and path_for_icon(icon_name).exists():
|
||||
return
|
||||
raise
|
||||
|
||||
document = xml.dom.minidom.parseString(original_svg_data)
|
||||
svgElement = document.documentElement
|
||||
@@ -165,7 +173,7 @@ def get_projects(
|
||||
for icon in ICONS:
|
||||
fetch_icon(icon)
|
||||
|
||||
github = Github(auth) if online else None
|
||||
github = Github(auth=Auth.Token(auth)) if (online and auth) else None
|
||||
|
||||
return sorted((Project(item, github) for item in config), reverse=online)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
import dataclasses
|
||||
import re
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
# /// script
|
||||
# dependencies = [
|
||||
# "click",
|
||||
# ]
|
||||
# ///
|
||||
|
||||
|
||||
import os
|
||||
@@ -115,11 +121,6 @@ services = [
|
||||
dst_config_path=".gitlab-ci.yml",
|
||||
badge_md="[](https://gitlab.com/joerick/cibuildwheel/-/commits/{branch})",
|
||||
),
|
||||
CIService(
|
||||
name="cirrus-ci",
|
||||
dst_config_path=".cirrus.yml",
|
||||
badge_md="[](https://cirrus-ci.com/github/pypa/cibuildwheel/{branch})",
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
|
||||
import argparse
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
|
||||
import argparse
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
# /// script
|
||||
# dependencies = [
|
||||
# "packaging",
|
||||
# "requests",
|
||||
# ]
|
||||
# ///
|
||||
|
||||
import configparser
|
||||
import dataclasses
|
||||
|
||||
@@ -1,49 +1,60 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
# /// script
|
||||
# dependencies = [
|
||||
# "playwright",
|
||||
# ]
|
||||
# ///
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
|
||||
try:
|
||||
from html2image import Html2Image # type: ignore[import-not-found]
|
||||
except ImportError:
|
||||
sys.exit(
|
||||
"""
|
||||
html2image not found. Ensure you have Chrome (on Mac/Windows) or
|
||||
Chromium (on Linux) installed, and then do:
|
||||
pip install html2image
|
||||
"""
|
||||
)
|
||||
from playwright.sync_api import sync_playwright # type: ignore[import-not-found]
|
||||
|
||||
CSS = """
|
||||
<link href="https://fonts.googleapis.com/css2?family=Lato&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
html, body {
|
||||
font-family: Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
color: #404040;
|
||||
background: white;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
</style>
|
||||
"""
|
||||
|
||||
|
||||
def main() -> None:
|
||||
subprocess.run(["mkdocs", "build"], check=True)
|
||||
subprocess.run([sys.executable, "-m", "playwright", "install", "chromium"], check=True)
|
||||
|
||||
hti = Html2Image(custom_flags=["--force-device-scale-factor=2"])
|
||||
html_str = Path("docs/diagram.html").read_text()
|
||||
html_str = f"<html><head>{CSS}</head><body>{html_str}</body></html>"
|
||||
|
||||
html_str = Path("docs/diagram.md").read_text()
|
||||
css_tags = f"""
|
||||
<style>{Path("site/css/theme.css").read_text()}</style>
|
||||
<style>{Path("site/css/theme_extra.css").read_text()}</style>
|
||||
<style>{Path("site/extra.css").read_text()}</style>
|
||||
<style>
|
||||
body {{
|
||||
background: white;
|
||||
}}
|
||||
</style>
|
||||
"""
|
||||
html_str = css_tags + html_str
|
||||
with tempfile.TemporaryDirectory() as tmp_dir_str:
|
||||
html_path = Path(tmp_dir_str) / "diagram_screenshot.html"
|
||||
html_path.write_text(html_str)
|
||||
|
||||
[screenshot, *_] = hti.screenshot(
|
||||
html_str=html_str,
|
||||
size=(830, 405),
|
||||
)
|
||||
dest_path = Path("docs/data/how-it-works.png")
|
||||
|
||||
dest_path = Path("docs/data/how-it-works.png")
|
||||
dest_path.unlink(missing_ok=True)
|
||||
with sync_playwright() as p:
|
||||
browser = p.chromium.launch()
|
||||
page = browser.new_page(device_scale_factor=2, viewport={"width": 830, "height": 600})
|
||||
page.goto(html_path.as_uri())
|
||||
page.wait_for_load_state("networkidle")
|
||||
|
||||
Path(screenshot).rename(dest_path)
|
||||
height = page.evaluate("document.body.scrollHeight")
|
||||
page.set_viewport_size({"width": 830, "height": height})
|
||||
|
||||
page.screenshot(path=str(dest_path), full_page=True)
|
||||
browser.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
+10
-1
@@ -1,4 +1,13 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
# /// script
|
||||
# dependencies = [
|
||||
# "click",
|
||||
# "packaging",
|
||||
# "requests",
|
||||
# "rich",
|
||||
# ]
|
||||
# ///
|
||||
|
||||
|
||||
import dataclasses
|
||||
|
||||
@@ -1,4 +1,13 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
# /// script
|
||||
# dependencies = [
|
||||
# "cibuildwheel",
|
||||
# ]
|
||||
#
|
||||
# [tool.uv.sources]
|
||||
# cibuildwheel = { path = ".." }
|
||||
# ///
|
||||
|
||||
import json
|
||||
|
||||
|
||||
+14
-1
@@ -1,4 +1,17 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
# /// script
|
||||
# dependencies = [
|
||||
# "click",
|
||||
# "packaging",
|
||||
# "requests",
|
||||
# "rich",
|
||||
# "cibuildwheel",
|
||||
# ]
|
||||
#
|
||||
# [tool.uv.sources]
|
||||
# cibuildwheel = { path = ".." }
|
||||
# ///
|
||||
|
||||
|
||||
import difflib
|
||||
|
||||
@@ -1,4 +1,16 @@
|
||||
#!/usr/bin/env python3
|
||||
#!/usr/bin/env -S uv run --script
|
||||
|
||||
# /// script
|
||||
# dependencies = [
|
||||
# "click",
|
||||
# "packaging",
|
||||
# "rich",
|
||||
# "cibuildwheel",
|
||||
# ]
|
||||
#
|
||||
# [tool.uv.sources]
|
||||
# cibuildwheel = { path = ".." }
|
||||
# ///
|
||||
|
||||
|
||||
import dataclasses
|
||||
|
||||
@@ -14,7 +14,6 @@ class CIProvider(Enum):
|
||||
azure_pipelines = "azure_pipelines"
|
||||
github_actions = "github_actions"
|
||||
gitlab = "gitlab"
|
||||
cirrus_ci = "cirrus_ci"
|
||||
|
||||
# unofficial support
|
||||
appveyor = "appveyor"
|
||||
@@ -35,8 +34,6 @@ def detect_ci_provider() -> CIProvider | None:
|
||||
return CIProvider.github_actions
|
||||
elif "GITLAB_CI" in os.environ:
|
||||
return CIProvider.gitlab
|
||||
elif "CIRRUS_CI" in os.environ:
|
||||
return CIProvider.cirrus_ci
|
||||
elif strtobool(os.environ.get("CI", "false")):
|
||||
return CIProvider.other
|
||||
else:
|
||||
|
||||
@@ -36,6 +36,8 @@ from cibuildwheel.util.packaging import find_compatible_wheel
|
||||
from cibuildwheel.util.python_build_standalone import create_python_build_standalone_environment
|
||||
from cibuildwheel.venv import constraint_flags, find_uv, virtualenv
|
||||
|
||||
RESOURCES_ANDROID = resources.PATH / "android"
|
||||
|
||||
ANDROID_TRIPLET = {
|
||||
"arm64_v8a": "aarch64-linux-android",
|
||||
"x86_64": "x86_64-linux-android",
|
||||
@@ -176,6 +178,11 @@ def setup_target_python(config: PythonConfiguration, build_path: Path) -> Path:
|
||||
python_dir = build_path / "python"
|
||||
python_dir.mkdir()
|
||||
shutil.unpack_archive(python_tgz, python_dir)
|
||||
|
||||
# Patch a testbed bug. This code and the patch file can both be removed once we've
|
||||
# updated to Python versions that include the fix.
|
||||
call("patch", "-p1", "-i", RESOURCES_ANDROID / "android.patch", cwd=python_dir)
|
||||
|
||||
return python_dir
|
||||
|
||||
|
||||
@@ -222,7 +229,10 @@ def setup_env(
|
||||
f"or insert {command} above it."
|
||||
)
|
||||
raise errors.FatalError(msg)
|
||||
call(command, "--version", env=build_env)
|
||||
if command == "python":
|
||||
call(command, "-V", "-V", env=build_env)
|
||||
else:
|
||||
call(command, "--version", env=build_env)
|
||||
|
||||
# Construct an altered environment which simulates running on Android.
|
||||
android_env = setup_android_env(config, python_dir, venv_dir, build_env)
|
||||
@@ -350,7 +360,7 @@ def setup_android_env(
|
||||
) -> dict[str, str]:
|
||||
site_packages = next(venv_dir.glob("lib/python*/site-packages"))
|
||||
for suffix in ["pth", "py"]:
|
||||
shutil.copy(resources.PATH / f"_cross_venv.{suffix}", site_packages)
|
||||
shutil.copy(RESOURCES_ANDROID / f"_cross_venv.{suffix}", site_packages)
|
||||
|
||||
sysconfigdata_path = Path(
|
||||
shutil.copy(
|
||||
@@ -425,7 +435,7 @@ def setup_rust(
|
||||
venv_bin = Path(env["VIRTUAL_ENV"]) / "bin"
|
||||
for tool in ["cargo", "rustup"]:
|
||||
shim_path = venv_bin / tool
|
||||
shutil.copy(resources.PATH / "_rust_shim.py", shim_path)
|
||||
shutil.copy(RESOURCES_ANDROID / "rust_shim.py", shim_path)
|
||||
shim_path.chmod(0o755)
|
||||
|
||||
|
||||
@@ -632,7 +642,7 @@ def test_wheel(state: BuildState, wheel: Path, *, build_frontend: str) -> None:
|
||||
return
|
||||
|
||||
log.step("Testing wheel...")
|
||||
use_uv = build_frontend == "build[uv]"
|
||||
use_uv = build_frontend in {"build[uv]", "uv"}
|
||||
uv_path = find_uv()
|
||||
if use_uv and uv_path is None:
|
||||
msg = "uv not found"
|
||||
|
||||
@@ -355,7 +355,7 @@ def setup_python(
|
||||
"entry or insert python above it."
|
||||
)
|
||||
raise errors.FatalError(msg)
|
||||
call("python", "--version", env=env)
|
||||
call("python", "-V", "-V", env=env)
|
||||
|
||||
# Check what pip version we're on
|
||||
assert (venv_bin_path / "pip").exists()
|
||||
|
||||
@@ -237,6 +237,7 @@ def build_in_container(
|
||||
if PurePosixPath(which_python) != python_bin / "python":
|
||||
msg = "python available on PATH doesn't match our installed instance. If you have modified PATH, ensure that you don't overwrite cibuildwheel's entry or insert python above it."
|
||||
raise errors.FatalError(msg)
|
||||
container.call(["python", "-V", "-V"], env=env)
|
||||
|
||||
if use_uv:
|
||||
which_uv = container.call(["which", "uv"], env=env, capture_output=True).strip()
|
||||
@@ -481,8 +482,7 @@ def build(options: Options, tmp_path: Path) -> None:
|
||||
Docker or Podman is required to run Linux builds. If you're
|
||||
building on Travis CI, add `services: [docker]` to your
|
||||
.travis.yml. If you're building on Circle CI in Linux, add a
|
||||
`setup_remote_docker` step to your .circleci/config.yml. If
|
||||
you're building on Cirrus CI, use `docker_builder` task.
|
||||
`setup_remote_docker` step to your .circleci/config.yml.
|
||||
"""
|
||||
)
|
||||
raise errors.ConfigurationError(msg) from error
|
||||
|
||||
@@ -270,7 +270,7 @@ def setup_python(
|
||||
if which_python != str(venv_bin_path / "python"):
|
||||
msg = "python available on PATH doesn't match our installed instance. If you have modified PATH, ensure that you don't overwrite cibuildwheel's entry or insert python above it."
|
||||
raise errors.FatalError(msg)
|
||||
call("python", "--version", env=env)
|
||||
call("python", "-V", "-V", env=env)
|
||||
|
||||
# check what pip version we're on
|
||||
if not use_uv:
|
||||
|
||||
@@ -94,21 +94,28 @@ def ensure_node(major_version: str) -> Path:
|
||||
return path
|
||||
|
||||
|
||||
def install_emscripten(tmp: Path, version: str) -> Path:
|
||||
url = f"https://github.com/emscripten-core/emsdk/archive/refs/tags/{version}.zip"
|
||||
installation_path = CIBW_CACHE_PATH / f"emsdk-{version}"
|
||||
emsdk_path = installation_path / f"emsdk-{version}/emsdk"
|
||||
emcc_path = installation_path / f"emsdk-{version}/upstream/emscripten/emcc"
|
||||
with FileLock(f"{installation_path}.lock"):
|
||||
if installation_path.exists():
|
||||
def install_emscripten(
|
||||
env: dict[str, str], version: str, xbuildenv_cache_path: Path, pyodide_version: str
|
||||
) -> Path:
|
||||
"""Install Emscripten via pyodide-build, which also applies Pyodide-specific patches."""
|
||||
emcc_path = (
|
||||
xbuildenv_cache_path / pyodide_version / "emsdk" / "upstream" / "emscripten" / "emcc"
|
||||
)
|
||||
with FileLock(CIBW_CACHE_PATH / "emscripten.lock"):
|
||||
if emcc_path.exists():
|
||||
return emcc_path
|
||||
emsdk_zip = tmp / "emsdk.zip"
|
||||
download(url, emsdk_zip)
|
||||
installation_path.mkdir()
|
||||
extract_zip(emsdk_zip, installation_path)
|
||||
call(emsdk_path, "install", version)
|
||||
call(emsdk_path, "activate", version)
|
||||
|
||||
call(
|
||||
"pyodide",
|
||||
"xbuildenv",
|
||||
"install-emscripten",
|
||||
"--version",
|
||||
version,
|
||||
"--path",
|
||||
str(xbuildenv_cache_path),
|
||||
env=env,
|
||||
cwd=CIBW_CACHE_PATH,
|
||||
)
|
||||
assert emcc_path.exists()
|
||||
return emcc_path
|
||||
|
||||
|
||||
@@ -180,12 +187,8 @@ def validate_pyodide_build_version(
|
||||
raise errors.FatalError(msg)
|
||||
|
||||
|
||||
def install_xbuildenv(env: dict[str, str], pyodide_build_version: str, pyodide_version: str) -> str:
|
||||
def install_xbuildenv(env: dict[str, str], xbuildenv_cache_path: Path, pyodide_version: str) -> str:
|
||||
"""Install a particular Pyodide xbuildenv version and set a path to the Pyodide root."""
|
||||
# Since pyodide-build was unvendored from Pyodide v0.27.0, the versions of
|
||||
# pyodide-build are uncoupled from the versions of Pyodide. So, we specify
|
||||
# both the pyodide-build version and the Pyodide version in the temp path.
|
||||
xbuildenv_cache_path = CIBW_CACHE_PATH / f"pyodide-build-{pyodide_build_version}"
|
||||
pyodide_root = xbuildenv_cache_path / pyodide_version / "xbuildenv" / "pyodide-root"
|
||||
|
||||
with FileLock(CIBW_CACHE_PATH / "xbuildenv.lock"):
|
||||
@@ -268,7 +271,7 @@ def setup_python(
|
||||
if which_python != str(venv_bin_path / "python"):
|
||||
msg = "python available on PATH doesn't match our venv instance. If you have modified PATH, ensure that you don't overwrite cibuildwheel's entry or insert python above it."
|
||||
raise errors.FatalError(msg)
|
||||
call("python", "--version", env=env)
|
||||
call("python", "-V", "-V", env=env)
|
||||
|
||||
# check what pip version we're on
|
||||
assert (venv_bin_path / "pip").exists()
|
||||
@@ -303,14 +306,18 @@ def setup_python(
|
||||
pyodide_build_version=pyodide_build_version,
|
||||
)
|
||||
|
||||
emscripten_version = xbuildenv_info["emscripten"]
|
||||
log.step(f"Installing Emscripten version: {emscripten_version} ...")
|
||||
emcc_path = install_emscripten(tmp, emscripten_version)
|
||||
|
||||
env["PATH"] = os.pathsep.join([str(emcc_path.parent), env["PATH"]])
|
||||
xbuildenv_cache_path = CIBW_CACHE_PATH / f"pyodide-build-{pyodide_build_version}"
|
||||
|
||||
log.step(f"Installing Pyodide xbuildenv version: {pyodide_version} ...")
|
||||
env["PYODIDE_ROOT"] = install_xbuildenv(env, pyodide_build_version, pyodide_version)
|
||||
env["PYODIDE_ROOT"] = install_xbuildenv(env, xbuildenv_cache_path, pyodide_version)
|
||||
|
||||
emscripten_version = xbuildenv_info["emscripten"]
|
||||
log.step(
|
||||
f"Installing Emscripten {emscripten_version} and applying Pyodide-specific patches ..."
|
||||
)
|
||||
emcc_path = install_emscripten(env, emscripten_version, xbuildenv_cache_path, pyodide_version)
|
||||
|
||||
env["PATH"] = os.pathsep.join([str(emcc_path.parent), env["PATH"]])
|
||||
|
||||
return env
|
||||
|
||||
|
||||
@@ -306,7 +306,7 @@ def setup_python(
|
||||
if where_python != str(venv_path / "Scripts" / "python.exe"):
|
||||
msg = "python available on PATH doesn't match our installed instance. If you have modified PATH, ensure that you don't overwrite cibuildwheel's entry or insert python above it."
|
||||
raise errors.FatalError(msg)
|
||||
call("python", "--version", env=env)
|
||||
call("python", "-V", "-V", env=env)
|
||||
call("python", "-c", "\"import struct; print(struct.calcsize('P') * 8)\"", env=env)
|
||||
|
||||
# check what pip version we're on
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
--- a/android.py
|
||||
+++ b/android.py
|
||||
@@ -1021,7 +1021,7 @@ def main():
|
||||
context = parse_args()
|
||||
|
||||
# Set the CROSS_BUILD_DIR if an argument was provided
|
||||
- if context.cross_build_dir:
|
||||
+ if getattr(context, "cross_build_dir", None):
|
||||
global CROSS_BUILD_DIR
|
||||
CROSS_BUILD_DIR = context.cross_build_dir.resolve()
|
||||
|
||||
@@ -161,18 +161,18 @@ python_configurations = [
|
||||
{ identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.10/python-3.12.10-macos11.pkg" },
|
||||
{ identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.10/python-3.12.10-macos11.pkg" },
|
||||
{ identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.10/python-3.12.10-macos11.pkg" },
|
||||
{ identifier = "cp313-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.12/python-3.13.12-macos11.pkg" },
|
||||
{ identifier = "cp313-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.12/python-3.13.12-macos11.pkg" },
|
||||
{ identifier = "cp313-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.12/python-3.13.12-macos11.pkg" },
|
||||
{ identifier = "cp313t-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.12/python-3.13.12-macos11.pkg" },
|
||||
{ identifier = "cp313t-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.12/python-3.13.12-macos11.pkg" },
|
||||
{ identifier = "cp313t-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.12/python-3.13.12-macos11.pkg" },
|
||||
{ identifier = "cp314-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.3/python-3.14.3-macos11.pkg" },
|
||||
{ identifier = "cp314-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.3/python-3.14.3-macos11.pkg" },
|
||||
{ identifier = "cp314-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.3/python-3.14.3-macos11.pkg" },
|
||||
{ identifier = "cp314t-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.3/python-3.14.3-macos11.pkg" },
|
||||
{ identifier = "cp314t-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.3/python-3.14.3-macos11.pkg" },
|
||||
{ identifier = "cp314t-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.3/python-3.14.3-macos11.pkg" },
|
||||
{ identifier = "cp313-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.13/python-3.13.13-macos11.pkg" },
|
||||
{ identifier = "cp313-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.13/python-3.13.13-macos11.pkg" },
|
||||
{ identifier = "cp313-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.13/python-3.13.13-macos11.pkg" },
|
||||
{ identifier = "cp313t-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.13/python-3.13.13-macos11.pkg" },
|
||||
{ identifier = "cp313t-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.13/python-3.13.13-macos11.pkg" },
|
||||
{ identifier = "cp313t-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.13/python-3.13.13-macos11.pkg" },
|
||||
{ identifier = "cp314-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.4/python-3.14.4-macos11.pkg" },
|
||||
{ identifier = "cp314-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.4/python-3.14.4-macos11.pkg" },
|
||||
{ identifier = "cp314-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.4/python-3.14.4-macos11.pkg" },
|
||||
{ identifier = "cp314t-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.4/python-3.14.4-macos11.pkg" },
|
||||
{ identifier = "cp314t-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.4/python-3.14.4-macos11.pkg" },
|
||||
{ identifier = "cp314t-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.4/python-3.14.4-macos11.pkg" },
|
||||
{ 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" },
|
||||
@@ -199,22 +199,22 @@ python_configurations = [
|
||||
{ identifier = "cp311-win_amd64", version = "3.11.9" },
|
||||
{ identifier = "cp312-win32", version = "3.12.10" },
|
||||
{ identifier = "cp312-win_amd64", version = "3.12.10" },
|
||||
{ identifier = "cp313-win32", version = "3.13.12" },
|
||||
{ identifier = "cp313t-win32", version = "3.13.12" },
|
||||
{ identifier = "cp313-win_amd64", version = "3.13.12" },
|
||||
{ identifier = "cp313t-win_amd64", version = "3.13.12" },
|
||||
{ identifier = "cp314-win32", version = "3.14.3" },
|
||||
{ identifier = "cp314t-win32", version = "3.14.3" },
|
||||
{ identifier = "cp314-win_amd64", version = "3.14.3" },
|
||||
{ identifier = "cp314t-win_amd64", version = "3.14.3" },
|
||||
{ identifier = "cp313-win32", version = "3.13.13" },
|
||||
{ identifier = "cp313t-win32", version = "3.13.13" },
|
||||
{ identifier = "cp313-win_amd64", version = "3.13.13" },
|
||||
{ identifier = "cp313t-win_amd64", version = "3.13.13" },
|
||||
{ identifier = "cp314-win32", version = "3.14.4" },
|
||||
{ identifier = "cp314t-win32", version = "3.14.4" },
|
||||
{ identifier = "cp314-win_amd64", version = "3.14.4" },
|
||||
{ identifier = "cp314t-win_amd64", version = "3.14.4" },
|
||||
{ identifier = "cp39-win_arm64", version = "3.9.10" },
|
||||
{ identifier = "cp310-win_arm64", version = "3.10.11" },
|
||||
{ identifier = "cp311-win_arm64", version = "3.11.9" },
|
||||
{ identifier = "cp312-win_arm64", version = "3.12.10" },
|
||||
{ identifier = "cp313-win_arm64", version = "3.13.12" },
|
||||
{ identifier = "cp313t-win_arm64", version = "3.13.12" },
|
||||
{ identifier = "cp314-win_arm64", version = "3.14.3" },
|
||||
{ identifier = "cp314t-win_arm64", version = "3.14.3" },
|
||||
{ identifier = "cp313-win_arm64", version = "3.13.13" },
|
||||
{ identifier = "cp313t-win_arm64", version = "3.13.13" },
|
||||
{ identifier = "cp314-win_arm64", version = "3.14.4" },
|
||||
{ identifier = "cp314t-win_arm64", version = "3.14.4" },
|
||||
{ identifier = "pp38-win_amd64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" },
|
||||
{ identifier = "pp39-win_amd64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-win64.zip" },
|
||||
{ identifier = "pp310-win_amd64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.19-win64.zip" },
|
||||
@@ -231,10 +231,10 @@ python_configurations = [
|
||||
|
||||
[android]
|
||||
python_configurations = [
|
||||
{ identifier = "cp313-android_arm64_v8a", version = "3.13", url = "https://repo.maven.apache.org/maven2/com/chaquo/python/python/3.13.12/python-3.13.12-aarch64-linux-android.tar.gz" },
|
||||
{ identifier = "cp313-android_x86_64", version = "3.13", url = "https://repo.maven.apache.org/maven2/com/chaquo/python/python/3.13.12/python-3.13.12-x86_64-linux-android.tar.gz" },
|
||||
{ identifier = "cp314-android_arm64_v8a", version = "3.14", url = "https://www.python.org/ftp/python/3.14.3/python-3.14.3-aarch64-linux-android.tar.gz" },
|
||||
{ identifier = "cp314-android_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.3/python-3.14.3-x86_64-linux-android.tar.gz" },
|
||||
{ identifier = "cp313-android_arm64_v8a", version = "3.13", url = "https://repo.maven.apache.org/maven2/com/chaquo/python/python/3.13.13/python-3.13.13-aarch64-linux-android.tar.gz" },
|
||||
{ identifier = "cp313-android_x86_64", version = "3.13", url = "https://repo.maven.apache.org/maven2/com/chaquo/python/python/3.13.13/python-3.13.13-x86_64-linux-android.tar.gz" },
|
||||
{ identifier = "cp314-android_arm64_v8a", version = "3.14", url = "https://www.python.org/ftp/python/3.14.4/python-3.14.4-aarch64-linux-android.tar.gz" },
|
||||
{ identifier = "cp314-android_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.4/python-3.14.4-x86_64-linux-android.tar.gz" },
|
||||
]
|
||||
|
||||
[ios]
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# nox -s update_constraints
|
||||
altgraph==0.17.5
|
||||
# via macholib
|
||||
build==1.4.0
|
||||
build==1.4.3
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.13.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
@@ -22,21 +22,21 @@ packaging==26.0
|
||||
# delocate
|
||||
pip==26.0.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.9.4
|
||||
platformdirs==4.9.6
|
||||
# via
|
||||
# python-discovery
|
||||
# virtualenv
|
||||
pyproject-hooks==1.2.0
|
||||
# via build
|
||||
python-discovery==1.2.0
|
||||
python-discovery==1.2.2
|
||||
# via virtualenv
|
||||
tomli==2.4.0
|
||||
tomli==2.4.1
|
||||
# via build
|
||||
typing-extensions==4.15.0
|
||||
# via
|
||||
# delocate
|
||||
# virtualenv
|
||||
virtualenv==21.2.0
|
||||
virtualenv==21.2.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
zipp==3.23.0
|
||||
# via importlib-metadata
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# nox -s update_constraints
|
||||
altgraph==0.17.5
|
||||
# via macholib
|
||||
build==1.4.0
|
||||
build==1.4.3
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.13.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
@@ -20,15 +20,15 @@ packaging==26.0
|
||||
# delocate
|
||||
pip==26.0.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.9.4
|
||||
platformdirs==4.9.6
|
||||
# via
|
||||
# python-discovery
|
||||
# virtualenv
|
||||
pyproject-hooks==1.2.0
|
||||
# via build
|
||||
python-discovery==1.2.0
|
||||
python-discovery==1.2.2
|
||||
# via virtualenv
|
||||
typing-extensions==4.15.0
|
||||
# via delocate
|
||||
virtualenv==21.2.0
|
||||
virtualenv==21.2.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# nox -s update_constraints
|
||||
altgraph==0.17.5
|
||||
# via macholib
|
||||
build==1.4.0
|
||||
build==1.4.3
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.13.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
@@ -20,15 +20,15 @@ packaging==26.0
|
||||
# delocate
|
||||
pip==26.0.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.9.4
|
||||
platformdirs==4.9.6
|
||||
# via
|
||||
# python-discovery
|
||||
# virtualenv
|
||||
pyproject-hooks==1.2.0
|
||||
# via build
|
||||
python-discovery==1.2.0
|
||||
python-discovery==1.2.2
|
||||
# via virtualenv
|
||||
typing-extensions==4.15.0
|
||||
# via delocate
|
||||
virtualenv==21.2.0
|
||||
virtualenv==21.2.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# nox -s update_constraints
|
||||
altgraph==0.17.5
|
||||
# via macholib
|
||||
build==1.4.0
|
||||
build==1.4.3
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.13.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
@@ -20,15 +20,15 @@ packaging==26.0
|
||||
# delocate
|
||||
pip==26.0.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.9.4
|
||||
platformdirs==4.9.6
|
||||
# via
|
||||
# python-discovery
|
||||
# virtualenv
|
||||
pyproject-hooks==1.2.0
|
||||
# via build
|
||||
python-discovery==1.2.0
|
||||
python-discovery==1.2.2
|
||||
# via virtualenv
|
||||
typing-extensions==4.15.0
|
||||
# via delocate
|
||||
virtualenv==21.2.0
|
||||
virtualenv==21.2.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# nox -s update_constraints
|
||||
altgraph==0.17.5
|
||||
# via macholib
|
||||
build==1.4.0
|
||||
build==1.4.3
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.13.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
@@ -20,15 +20,15 @@ packaging==26.0
|
||||
# delocate
|
||||
pip==26.0.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.9.4
|
||||
platformdirs==4.9.6
|
||||
# via
|
||||
# python-discovery
|
||||
# virtualenv
|
||||
pyproject-hooks==1.2.0
|
||||
# via build
|
||||
python-discovery==1.2.0
|
||||
python-discovery==1.2.2
|
||||
# via virtualenv
|
||||
typing-extensions==4.15.0
|
||||
# via delocate
|
||||
virtualenv==21.2.0
|
||||
virtualenv==21.2.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -28,15 +28,15 @@ platformdirs==4.3.6
|
||||
# virtualenv
|
||||
pyproject-hooks==1.2.0
|
||||
# via build
|
||||
python-discovery==1.2.0
|
||||
python-discovery==1.2.2
|
||||
# via virtualenv
|
||||
tomli==2.4.0
|
||||
tomli==2.4.1
|
||||
# via build
|
||||
typing-extensions==4.13.2
|
||||
# via
|
||||
# delocate
|
||||
# virtualenv
|
||||
virtualenv==21.2.0
|
||||
virtualenv==21.2.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
zipp==3.20.2
|
||||
# via importlib-metadata
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# nox -s update_constraints
|
||||
altgraph==0.17.5
|
||||
# via macholib
|
||||
build==1.4.0
|
||||
build==1.4.3
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.13.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
@@ -28,15 +28,15 @@ platformdirs==4.4.0
|
||||
# virtualenv
|
||||
pyproject-hooks==1.2.0
|
||||
# via build
|
||||
python-discovery==1.2.0
|
||||
python-discovery==1.2.2
|
||||
# via virtualenv
|
||||
tomli==2.4.0
|
||||
tomli==2.4.1
|
||||
# via build
|
||||
typing-extensions==4.15.0
|
||||
# via
|
||||
# delocate
|
||||
# virtualenv
|
||||
virtualenv==21.2.0
|
||||
virtualenv==21.2.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
zipp==3.23.0
|
||||
# via importlib-metadata
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# nox -s update_constraints
|
||||
altgraph==0.17.5
|
||||
# via macholib
|
||||
build==1.4.0
|
||||
build==1.4.3
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.13.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
@@ -20,15 +20,15 @@ packaging==26.0
|
||||
# delocate
|
||||
pip==26.0.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.9.4
|
||||
platformdirs==4.9.6
|
||||
# via
|
||||
# python-discovery
|
||||
# virtualenv
|
||||
pyproject-hooks==1.2.0
|
||||
# via build
|
||||
python-discovery==1.2.0
|
||||
python-discovery==1.2.2
|
||||
# via virtualenv
|
||||
typing-extensions==4.15.0
|
||||
# via delocate
|
||||
virtualenv==21.2.0
|
||||
virtualenv==21.2.1
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
url = "https://nodejs.org/dist/"
|
||||
v24 = "v24.14.0"
|
||||
v22 = "v22.22.1"
|
||||
v20 = "v20.20.1"
|
||||
v24 = "v24.14.1"
|
||||
v22 = "v22.22.2"
|
||||
v20 = "v20.20.2"
|
||||
|
||||
@@ -1,54 +1,54 @@
|
||||
[x86_64]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2026.03.20-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2026.03.20-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2026.03.20-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2026.03.20-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2026.04.08-5
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2026.04.08-5
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2026.04.08-5
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2026.04.08-5
|
||||
|
||||
[i686]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2026.03.20-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2026.03.20-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2026.03.20-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2026.03.20-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2026.04.08-5
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2026.04.08-5
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2026.04.08-5
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2026.04.08-5
|
||||
|
||||
[aarch64]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2026.03.20-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2026.03.20-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2026.03.20-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2026.03.20-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2026.04.08-5
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2026.04.08-5
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2026.04.08-5
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2026.04.08-5
|
||||
|
||||
[ppc64le]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2026.03.20-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2026.03.20-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_ppc64le:2026.03.20-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2026.03.20-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2026.04.08-5
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2026.04.08-5
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_ppc64le:2026.04.08-5
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2026.04.08-5
|
||||
|
||||
[s390x]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2026.03.20-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2026.03.20-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_s390x:2026.03.20-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2026.03.20-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2026.04.08-5
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2026.04.08-5
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_s390x:2026.04.08-5
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2026.04.08-5
|
||||
|
||||
[pypy_x86_64]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2026.03.20-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2026.03.20-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2026.03.20-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2026.04.08-5
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2026.04.08-5
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2026.04.08-5
|
||||
|
||||
[pypy_i686]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2026.03.20-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2026.03.20-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2026.03.20-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2026.04.08-5
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2026.04.08-5
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2026.04.08-5
|
||||
|
||||
[pypy_aarch64]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2026.03.20-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2026.03.20-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2026.03.20-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2026.04.08-5
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2026.04.08-5
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2026.04.08-5
|
||||
|
||||
[armv7l]
|
||||
manylinux_2_31 = quay.io/pypa/manylinux_2_31_armv7l:2026.03.20-1
|
||||
manylinux_2_35 = quay.io/pypa/manylinux_2_35_armv7l:2026.03.20-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2026.03.20-1
|
||||
manylinux_2_31 = quay.io/pypa/manylinux_2_31_armv7l:2026.04.08-5
|
||||
manylinux_2_35 = quay.io/pypa/manylinux_2_35_armv7l:2026.04.08-5
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2026.04.08-5
|
||||
|
||||
[riscv64]
|
||||
manylinux_2_39 = quay.io/pypa/manylinux_2_39_riscv64:2026.03.20-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_riscv64:2026.03.20-1
|
||||
manylinux_2_39 = quay.io/pypa/manylinux_2_39_riscv64:2026.04.08-5
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_riscv64:2026.04.08-5
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1 +1 @@
|
||||
default = { version = "21.2.0", url = "https://github.com/pypa/get-virtualenv/releases/download/21.2.0/virtualenv.pyz" }
|
||||
default = { version = "21.2.1", url = "https://github.com/pypa/get-virtualenv/releases/download/21.2.1/virtualenv.pyz" }
|
||||
|
||||
@@ -38,8 +38,7 @@ class EnableGroup(StrEnum):
|
||||
|
||||
@classmethod
|
||||
def all_groups(cls) -> frozenset[Self]:
|
||||
# see https://github.com/python/mypy/issues/20434 for the reason to type: ignore[arg-type]
|
||||
return frozenset(set(cls) - {cls.CPythonFreeThreading}) # type: ignore[arg-type]
|
||||
return frozenset(set(cls) - {cls.CPythonFreeThreading})
|
||||
|
||||
@classmethod
|
||||
def parse_option_value(cls, value: str) -> frozenset[Self]:
|
||||
|
||||
@@ -21,6 +21,7 @@ _5 March 2026_
|
||||
- 🌟 You can now build wheels using `uv` as a build frontend. This should improve performance, especially if your project has lots of build dependencies. To use, set [`build-frontend`](https://cibuildwheel.pypa.io/en/stable/options/#build-frontend) to `uv`. (#2322)
|
||||
- ⚠️ We no longer support running on Travis CI. It may continue working but we don't run tests there anymore so we can't be sure. (#2682)
|
||||
- ✨ Improvements to building rust wheels on Android (#2650)
|
||||
- 🛠 Update Pyodide to 0.29.3 (#2719, #2733)
|
||||
- 🐛 Fix bug with the GitHub Action on Windows, where PATH was getting unnecessarily changed, causing issues with meson builds. (#2723)
|
||||
- ✨ Add support for quiet setting on `build` and `uv` from the cibuildwheel `build-verbosity` setting. (#2737)
|
||||
- 📚 Docs updates, including guidance on using Meson on Windows (#2718)
|
||||
|
||||
+4
-14
@@ -103,20 +103,6 @@ Commit this file, and push to Gitlab. The pipeline should start automatically.
|
||||
|
||||
Gitlab will store the built wheels for you - you can access them from the Pipelines view. Check out the Gitlab [docs](https://docs.gitlab.com/ee/ci/yaml/) for more info on this config file.
|
||||
|
||||
### Cirrus CI [linux/mac/windows] {: #cirrus-ci}
|
||||
|
||||
To build Linux, Mac, and Windows wheels on Cirrus CI, create a `.cirrus.yml` file in your repo,
|
||||
|
||||
> .cirrus.yml
|
||||
|
||||
```yaml
|
||||
{% include "../examples/cirrus-ci-minimal.yml" %}
|
||||
```
|
||||
|
||||
Commit this file, enable building of your repo on Cirrus CI, and push.
|
||||
|
||||
Cirrus CI will store the built wheels for you - you can access them from the individual task view. Check out the Cirrus CI [docs](https://cirrus-ci.org/guide/writing-tasks/) for more info on this config file.
|
||||
|
||||
> ⚠️ Got an error? Check the [FAQ](faq.md).
|
||||
|
||||
### Other CI services
|
||||
@@ -125,6 +111,10 @@ Cirrus CI will store the built wheels for you - you can access them from the ind
|
||||
|
||||
Appveyor official support was dropped in cibuildwheel v3.0, due to a lack of CI credits. However, it can probably still be used as-is. Check the Appveyor example from the cibuildwheel v2.0 branch: [appveyor-minimal.yml](https://github.com/pypa/cibuildwheel/blob/v2.23.3/examples/appveyor-minimal.yml).
|
||||
|
||||
### Cirrus CI [linux/mac/windows] {: #cirrus-ci}
|
||||
|
||||
Due to Cirrus CI [end-of-life](https://cirruslabs.org) on June 1, 2026, we no longer officially support this service.
|
||||
|
||||
## Next steps
|
||||
|
||||
Once you've got the wheel building successfully, you might want to set up [testing](options.md#test-command) or [automatic releases to PyPI](deliver-to-pypi.md#automatic-method).
|
||||
|
||||
@@ -53,16 +53,6 @@ cibuildwheel to run tests, add the following YAML to your CI config file:
|
||||
CIBW_TEST_COMMAND: "pytest {project}/tests"
|
||||
```
|
||||
|
||||
!!! tab "Cirrus CI"
|
||||
|
||||
> .cirrus.yml ([docs](https://cirrus-ci.org/guide/writing-tasks/#environment-variables))
|
||||
|
||||
```yaml
|
||||
env:
|
||||
CIBW_TEST_REQUIRES: pytest
|
||||
CIBW_TEST_COMMAND: "pytest {project}/tests"
|
||||
```
|
||||
|
||||
## Configuration file {: #configuration-file}
|
||||
|
||||
You can configure cibuildwheel with a config file, such as `pyproject.toml`.
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 91 KiB |
@@ -20,7 +20,6 @@
|
||||
"travisci",
|
||||
"circleci",
|
||||
"gitlab",
|
||||
"cirrusci",
|
||||
"azurepipelines"
|
||||
]
|
||||
}
|
||||
@@ -28,7 +27,7 @@
|
||||
"ci_config": { "type": "string" },
|
||||
"os": {
|
||||
"type": "array",
|
||||
"items": { "enum": ["windows", "apple", "linux"] }
|
||||
"items": { "enum": ["windows", "apple", "linux", "android", "ios", "pyodide"] }
|
||||
}
|
||||
},
|
||||
"required": ["name", "gh", "ci", "os"]
|
||||
|
||||
+16
-16
@@ -3,8 +3,8 @@
|
||||
# gh: GitHub repo (eventually a url: could be added for non-github projects)
|
||||
# stars: GitHub repo (optional, if different from package, such as for Twisted)
|
||||
# pypi: The pypi name, if different from the GitHub package name
|
||||
# os: Operating system list, [windows, apple, linux] (optional)
|
||||
# ci: [github, azurepipelines, circleci, gitlab, travisci, cirrusci] (optional)
|
||||
# os: Operating system list, [windows, apple, linux, android, ios, pyodide] (optional)
|
||||
# ci: [github, azurepipelines, circleci, gitlab, travisci] (optional)
|
||||
# notes: (text, optional)
|
||||
|
||||
- name: abess
|
||||
@@ -17,7 +17,7 @@
|
||||
gh: matplotlib/matplotlib
|
||||
notes: The venerable Matplotlib, a Python library with C++ portions
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
os: [windows, apple, linux, pyodide]
|
||||
|
||||
- name: pyinstrument
|
||||
gh: joerick/pyinstrument
|
||||
@@ -48,8 +48,8 @@
|
||||
- name: pybase64
|
||||
gh: mayeut/pybase64
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
|
||||
os: [windows, apple, linux, android, ios, pyodide]
|
||||
notes: setuptools backend with custom CMake step for external sources. SBOM embedded via a custom repair step.
|
||||
|
||||
- name: KDEpy
|
||||
gh: tommyod/KDEpy
|
||||
@@ -144,7 +144,7 @@
|
||||
- name: scikit-learn
|
||||
gh: scikit-learn/scikit-learn
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
os: [windows, apple, linux, pyodide]
|
||||
ci_config: .github/workflows/wheels.yml
|
||||
notes: |
|
||||
The machine learning library. A complex but clean config using many of
|
||||
@@ -154,7 +154,7 @@
|
||||
- name: scikit-image
|
||||
gh: scikit-image/scikit-image
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
os: [windows, apple, linux, pyodide]
|
||||
ci_config: .github/workflows/cibuildwheel.yml
|
||||
notes: |
|
||||
Image processing library. Uses cibuildwheel to build and test a project
|
||||
@@ -173,7 +173,7 @@
|
||||
- name: pyzmq
|
||||
gh: zeromq/pyzmq
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
os: [windows, apple, linux, android]
|
||||
ci_config: .github/workflows/wheels.yml
|
||||
notes: |
|
||||
Python bindings for zeromq, the networking library.
|
||||
@@ -194,17 +194,17 @@
|
||||
- name: pybind11 python_example
|
||||
gh: pybind/python_example
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
os: [windows, apple, linux, pyodide]
|
||||
|
||||
- name: pybind11 cmake_example
|
||||
gh: pybind/cmake_example
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
os: [windows, apple, linux, pyodide]
|
||||
|
||||
- name: pybind11 scikit_build_example
|
||||
gh: pybind/scikit_build_example
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
os: [windows, apple, linux, pyodide]
|
||||
|
||||
- name: pybind11 cross build example
|
||||
gh: wbarnha/pybind_cmake_example_crossbuild
|
||||
@@ -215,7 +215,7 @@
|
||||
- name: iminuit
|
||||
gh: scikit-hep/iminuit
|
||||
ci: [github]
|
||||
os: [windows, apple, linux]
|
||||
os: [windows, apple, linux, pyodide]
|
||||
|
||||
- name: pyjet
|
||||
gh: scikit-hep/pyjet
|
||||
@@ -230,7 +230,7 @@
|
||||
- name: boost-histogram
|
||||
gh: scikit-hep/boost-histogram
|
||||
ci: [github, travisci]
|
||||
os: [windows, apple, linux]
|
||||
os: [windows, apple, linux, pyodide]
|
||||
notes: Supports full range of wheels, including PyPy and alternate archs.
|
||||
|
||||
- name: Rtree
|
||||
@@ -332,7 +332,7 @@
|
||||
- name: sourmash
|
||||
gh: sourmash-bio/sourmash
|
||||
ci: [github]
|
||||
os: [apple, linux, windows]
|
||||
os: [apple, linux, windows, pyodide]
|
||||
|
||||
- name: markupsafe
|
||||
gh: pallets/markupsafe
|
||||
@@ -401,7 +401,7 @@
|
||||
- name: pillow-heif
|
||||
gh: bigcat88/pillow_heif
|
||||
pypi: pillow-heif
|
||||
ci: [github, cirrusci]
|
||||
ci: [github]
|
||||
os: [apple, linux, windows]
|
||||
notes: Bindings to libheif library with third party dependencies. Fully automated CI for tests and publishing including Apple Silicon builds.
|
||||
|
||||
@@ -565,7 +565,7 @@
|
||||
- name: NumPy
|
||||
gh: numpy/numpy
|
||||
ci: [github, travisci]
|
||||
os: [windows, apple, linux]
|
||||
os: [windows, apple, linux, pyodide]
|
||||
|
||||
- name: Wrapt
|
||||
gh: GrahamDumpleton/wrapt
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 24 24" width="16px" fill="#606060"><title>Android icon</title><path d="M17.523 15.3414c-.5511 0-.9993-.4486-.9993-.9997s.4483-.9993.9993-.9993c.5511 0 .9993.4483.9993.9993.0001.5511-.4482.9997-.9993.9997m-11.046 0c-.5511 0-.9993-.4486-.9993-.9997s.4482-.9993.9993-.9993c.5511 0 .9993.4483.9993.9993 0 .5511-.4483.9997-.9993.9997m11.4045-6.02l1.9973-3.4592a.416.416 0 00-.1521-.5676.416.416 0 00-.5676.1521l-2.0223 3.503C15.5902 8.2439 13.8533 7.8508 12 7.8508s-3.5902.3931-5.1367 1.0989L4.841 5.4467a.4161.4161 0 00-.5677-.1521.4157.4157 0 00-.1521.5676l1.9973 3.4592C2.6889 11.1867.3432 14.6589 0 18.761h24c-.3435-4.1021-2.6892-7.5743-6.1185-9.4396"/></svg>
|
||||
|
After Width: | Height: | Size: 722 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 24 24" width="16px" fill="#606060"><title>Cirrus CI icon</title><path d="M19.422.453a1.113 1.113 0 0 0-1.113 1.115 1.113 1.113 0 0 0 1.112 1.114c1.31 0 2.35 1.042 2.35 2.363 0 1.32-1.04 2.363-2.35 2.363H1.112A1.113 1.113 0 0 0 0 8.52a1.113 1.113 0 0 0 1.113 1.117h18.31c1.308 0 2.35 1.042 2.35 2.363 0 1.32-1.042 2.363-2.35 2.363H1.112A1.113 1.113 0 0 0 0 15.48a1.113 1.113 0 0 0 1.113 1.112h18.31c1.308 0 2.35 1.042 2.35 2.363 0 1.32-1.042 2.363-2.35 2.363H1.112A1.113 1.113 0 0 0 0 22.432a1.113 1.113 0 0 0 1.113 1.115h18.31a1.113 1.113 0 0 0 .206-.022c2.42-.112 4.37-2.12 4.37-4.57 0-1.393-.642-2.634-1.63-3.478C23.356 14.632 24 13.393 24 12c0-1.393-.643-2.632-1.63-3.477C23.357 7.68 24 6.438 24 5.045c0-2.52-2.06-4.592-4.578-4.592z"/></svg>
|
||||
|
Before Width: | Height: | Size: 808 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 24 24" width="16px" fill="#606060"><title>iOS icon</title><path d="M1.1 6.05C.486 6.05 0 6.53 0 7.13A1.08 1.08 0 0 0 1.1 8.21C1.72 8.21 2.21 7.73 2.21 7.13C2.21 6.53 1.72 6.05 1.1 6.05M8.71 6.07C5.35 6.07 3.25 8.36 3.25 12C3.25 15.67 5.35 17.95 8.71 17.95C12.05 17.95 14.16 15.67 14.16 12C14.16 8.36 12.05 6.07 8.71 6.07M19.55 6.07C17.05 6.07 15.27 7.45 15.27 9.5C15.27 11.13 16.28 12.15 18.4 12.64L19.89 13C21.34 13.33 21.93 13.81 21.93 14.64C21.93 15.6 20.96 16.28 19.58 16.28C18.17 16.28 17.11 15.59 17 14.53H15C15.08 16.65 16.82 17.95 19.46 17.95C22.25 17.95 24 16.58 24 14.4C24 12.69 23 11.72 20.68 11.19L19.35 10.89C17.94 10.55 17.36 10.1 17.36 9.34C17.36 8.38 18.24 7.74 19.54 7.74C20.85 7.74 21.75 8.39 21.85 9.46H23.81C23.76 7.44 22.09 6.07 19.55 6.07M8.71 7.82C10.75 7.82 12.06 9.45 12.06 12C12.06 14.57 10.75 16.2 8.71 16.2C6.65 16.2 5.35 14.57 5.35 12C5.35 9.45 6.65 7.82 8.71 7.82M.111 9.31V17.76H2.1V9.31H.11Z"/></svg>
|
||||
|
After Width: | Height: | Size: 996 B |
@@ -0,0 +1,12 @@
|
||||
<svg width="16px" height="16px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_101_23)">
|
||||
<path d="M19.4079 13.0863C19.4079 13.0645 19.4062 11.8768 19.4045 11.8551H24.0001V23.7707H12.0828V11.8551H16.6783C16.6783 11.8768 16.675 13.0645 16.675 13.0863M22.1191 22.4962H22.9376L21.6965 18.2782H20.4519L19.4296 22.4962H20.2231L20.4302 21.5573H21.8485L22.1174 22.4962H22.1191ZM17.7708 22.4962H18.5543L19.5599 18.2782H18.7865L18.17 21.1848H18.16L17.5753 18.2782H16.837L16.1855 21.1497H16.1755L15.6359 18.2782H14.8474L15.7562 22.4962H16.5547L17.1811 19.6246H17.1911L17.7708 22.4962ZM20.9264 19.3172H21.2588L21.6547 20.8657H20.5822L20.9264 19.3172Z" fill="#606060"/>
|
||||
<path d="M11.6935 5.17811C11.6935 6.94883 10.2234 8.5191 8.35247 8.5191H1.67049V11.8601H0V0.166626H8.35247C10.1399 0.166626 11.6433 1.65337 11.6935 3.50761V5.17811ZM10.023 3.50761C10.023 2.58884 9.27124 1.83712 8.35247 1.83712H1.67049V6.8486H8.35247C9.27124 6.8486 10.023 6.09688 10.023 5.17811V3.50761Z" fill="#606060"/>
|
||||
<path d="M18.8766 8.185V11.8601H17.2061V8.185L12.1946 2.67237V0.166626H13.8651V1.98746L18.0413 6.58132L22.2175 1.98746V0.166626H23.888V2.67237L18.8766 8.185Z" fill="#606060"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_101_23">
|
||||
<rect width="24" height="24" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
+91
-30
@@ -5,6 +5,9 @@
|
||||
<div class="grid-line" style="grid-row-start: 3"></div>
|
||||
<div class="grid-line" style="grid-row-start: 4"></div>
|
||||
<div class="grid-line" style="grid-row-start: 5"></div>
|
||||
<div class="grid-line" style="grid-row-start: 6"></div>
|
||||
<div class="grid-line" style="grid-row-start: 7"></div>
|
||||
<div class="grid-line" style="grid-row-start: 8"></div>
|
||||
<!-- the docker container outline -->
|
||||
<div class="grid-outline docker">
|
||||
<div class="outline">
|
||||
@@ -17,11 +20,17 @@
|
||||
</div>
|
||||
<div class="grid-outline testVenv" style="grid-row-start: 4"><div class="outline"></div></div>
|
||||
<div class="grid-outline testVenv" style="grid-row-start: 5"><div class="outline"></div></div>
|
||||
<div class="grid-outline testVenv" style="grid-row-start: 6"><div class="outline"></div></div>
|
||||
<div class="grid-outline testVenv" style="grid-row-start: 7"><div class="outline"></div></div>
|
||||
<div class="grid-outline testVenv" style="grid-row-start: 8"><div class="outline"></div></div>
|
||||
<!-- THE GRID CONTENT -->
|
||||
<!-- the row labels -->
|
||||
<div class="grid-row-label" style="grid-row-start: 3">Linux</div>
|
||||
<div class="grid-row-label" style="grid-row-start: 4">macOS</div>
|
||||
<div class="grid-row-label" style="grid-row-start: 5">Windows</div>
|
||||
<div class="grid-row-label" style="grid-row-start: 6">Android</div>
|
||||
<div class="grid-row-label" style="grid-row-start: 7">iOS</div>
|
||||
<div class="grid-row-label" style="grid-row-start: 8">Pyodide</div>
|
||||
<!-- the column labels -->
|
||||
<div class="grid-column-label"
|
||||
style="grid-row: 1 / span 1; grid-column: 5 / -3">
|
||||
@@ -86,7 +95,7 @@
|
||||
[
|
||||
{
|
||||
href: 'options/#before-all',
|
||||
platforms: ['linux', 'macos', 'windows'],
|
||||
platforms: ['linux', 'macos', 'windows', 'android', 'ios', 'pyodide'],
|
||||
style: 'dot',
|
||||
tooltip: {
|
||||
title: 'CIBW_BEFORE_ALL',
|
||||
@@ -104,11 +113,27 @@
|
||||
description: 'Install the version of Python required to build this wheel.'
|
||||
},
|
||||
},
|
||||
{
|
||||
label: 'Install Python & set up cross-compilation',
|
||||
platforms: ['android', 'ios'],
|
||||
style: 'block',
|
||||
tooltip: {
|
||||
description: 'Install Python for the build and target platforms, and set up a cross-compilation environment.'
|
||||
},
|
||||
},
|
||||
{
|
||||
label: 'Set up Pyodide xbuildenv',
|
||||
platforms: ['pyodide'],
|
||||
style: 'block',
|
||||
tooltip: {
|
||||
description: 'Install a base Python, set up a build virtualenv with pyodide-build, install the Pyodide cross-build environment and Emscripten toolchain.'
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
href: 'options/#before-build',
|
||||
platforms: ['linux', 'macos', 'windows'],
|
||||
platforms: ['linux', 'macos', 'windows', 'android', 'ios', 'pyodide'],
|
||||
style: 'dot',
|
||||
tooltip: {
|
||||
title: 'CIBW_BEFORE_BUILD',
|
||||
@@ -121,12 +146,12 @@
|
||||
{
|
||||
label: 'Build wheel',
|
||||
href: 'options/#build-frontend',
|
||||
platforms: ['linux', 'macos', 'windows'],
|
||||
platforms: ['linux', 'macos', 'windows', 'android', 'ios', 'pyodide'],
|
||||
style: 'block',
|
||||
tooltip: {
|
||||
title: 'CIBW_BUILD_FRONTEND',
|
||||
tag: 'Customisable step',
|
||||
description: 'Build the wheel according to your package configuration, using the frontend of your choice - pip or build.'
|
||||
description: 'Build the wheel according to your package configuration, using the frontend of your choice – pip, build, or uv.'
|
||||
},
|
||||
},
|
||||
],
|
||||
@@ -154,23 +179,31 @@
|
||||
},
|
||||
},
|
||||
{
|
||||
env: "CIBW_REPAIR_WHEEL_COMMAND",
|
||||
label: 'Repair wheel',
|
||||
href: 'options/#repair-wheel-command',
|
||||
label: 'repair wheel',
|
||||
platforms: ['windows'],
|
||||
platforms: ['android'],
|
||||
style: 'block',
|
||||
tooltip: {
|
||||
title: 'CIBW_REPAIR_WHEEL_COMMAND',
|
||||
tag: 'Customisable step',
|
||||
description: 'By default, bundles libc++ into the wheel if any shared library links against it, using patchelf. Can be overridden with a custom repair command.'
|
||||
},
|
||||
},
|
||||
{
|
||||
href: 'options/#repair-wheel-command',
|
||||
platforms: ['windows', 'ios', 'pyodide'],
|
||||
style: 'dot',
|
||||
optional: true,
|
||||
tooltip: {
|
||||
title: 'CIBW_REPAIR_WHEEL_COMMAND',
|
||||
tag: 'Optional step',
|
||||
description: 'Execute a shell command to repair each built wheel'
|
||||
description: 'Execute a shell command to repair each built wheel.'
|
||||
},
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
href: 'options/#before-test',
|
||||
platforms: ['linux', 'macos', 'windows'],
|
||||
platforms: ['linux', 'macos', 'windows', 'android', 'ios', 'pyodide'],
|
||||
style: 'dot',
|
||||
tooltip: {
|
||||
title: 'CIBW_BEFORE_TEST',
|
||||
@@ -182,10 +215,10 @@
|
||||
[
|
||||
{
|
||||
label: 'Install wheel',
|
||||
platforms: ['linux', 'macos', 'windows'],
|
||||
platforms: ['linux', 'macos', 'windows', 'android', 'ios', 'pyodide'],
|
||||
style: 'block',
|
||||
tooltip: {
|
||||
description: 'Install the wheel we just built into the test virtualenv.'
|
||||
description: 'Install the wheel we just built into the test environment.'
|
||||
},
|
||||
},
|
||||
],
|
||||
@@ -198,7 +231,40 @@
|
||||
tooltip: {
|
||||
title: 'CIBW_TEST_COMMAND',
|
||||
tag: 'Optional step',
|
||||
description: 'Execute a shell command to test each built wheel'
|
||||
description: 'Execute a shell command to test each built wheel.'
|
||||
},
|
||||
},
|
||||
{
|
||||
label: 'Test on emulator',
|
||||
href: 'options/#test-command',
|
||||
platforms: ['android'],
|
||||
style: 'block',
|
||||
tooltip: {
|
||||
title: 'CIBW_TEST_COMMAND',
|
||||
tag: 'Optional step',
|
||||
description: 'Run the test command on an Android emulator using the CPython testbed.'
|
||||
},
|
||||
},
|
||||
{
|
||||
label: 'Test on simulator',
|
||||
href: 'options/#test-command',
|
||||
platforms: ['ios'],
|
||||
style: 'block',
|
||||
tooltip: {
|
||||
title: 'CIBW_TEST_COMMAND',
|
||||
tag: 'Optional step',
|
||||
description: 'Run the test command on an iOS simulator using the testbed app.'
|
||||
},
|
||||
},
|
||||
{
|
||||
label: 'Test in Node.js',
|
||||
href: 'options/#test-command',
|
||||
platforms: ['pyodide'],
|
||||
style: 'block',
|
||||
tooltip: {
|
||||
title: 'CIBW_TEST_COMMAND',
|
||||
tag: 'Optional step',
|
||||
description: 'Run the test command in a Pyodide virtualenv powered by Node.js.'
|
||||
},
|
||||
},
|
||||
],
|
||||
@@ -219,26 +285,21 @@
|
||||
data() {
|
||||
return {
|
||||
diagram,
|
||||
platforms: ['linux', 'macos', 'windows'],
|
||||
platforms: ['linux', 'macos', 'windows', 'android', 'ios', 'pyodide'],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
blockStyle(action) {
|
||||
let start, end
|
||||
if (action.platforms.includes('linux')) {
|
||||
start = 3
|
||||
} else if (action.platforms.includes('macos')) {
|
||||
start = 4
|
||||
} else if (action.platforms.includes('windows')) {
|
||||
start = 5
|
||||
}
|
||||
const platformOrder = ['linux', 'macos', 'windows', 'android', 'ios', 'pyodide']
|
||||
const rowOffset = 3 // first platform starts at grid row 3
|
||||
|
||||
if (action.platforms.includes('windows')) {
|
||||
end = 6
|
||||
} else if (action.platforms.includes('macos')) {
|
||||
end = 5
|
||||
} else if (action.platforms.includes('linux')) {
|
||||
end = 4
|
||||
let start = null
|
||||
let end = null
|
||||
for (let i = 0; i < platformOrder.length; i++) {
|
||||
if (action.platforms.includes(platformOrder[i])) {
|
||||
if (start === null) start = rowOffset + i
|
||||
end = rowOffset + i + 1
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -413,7 +474,7 @@
|
||||
.grid-outline {
|
||||
grid-row-end: span 1;
|
||||
position: relative;
|
||||
color: #8f8f8f;
|
||||
color: #666666;
|
||||
}
|
||||
.grid-outline.docker {
|
||||
grid-row: 3 / span 1;
|
||||
@@ -478,7 +539,7 @@
|
||||
font-weight: 500;
|
||||
text-transform: uppercase;
|
||||
font-size: 0.9em;
|
||||
color: #C9C9C9;
|
||||
color: #888888;
|
||||
}
|
||||
.tooltip-description {
|
||||
margin-top: 1px;
|
||||
|
||||
@@ -103,7 +103,6 @@ fragmentRedirect([
|
||||
{ source: 'setup/#appveyor', destination: 'ci-services/' },
|
||||
{ source: 'setup/#circleci', destination: 'ci-services/' },
|
||||
{ source: 'setup/#gitlab-ci', destination: 'ci-services/' },
|
||||
{ source: 'setup/#cirrus-ci', destination: 'ci-services/' },
|
||||
|
||||
{ source: 'faq/#linux-builds-in-containers', destination: 'platforms/#linux-containers' },
|
||||
{ source: 'faq/#apple-silicon', destination: 'platforms/#macos-architectures' },
|
||||
|
||||
+22
-20
@@ -8,17 +8,17 @@ title: Working examples
|
||||
|
||||
| Name | CI | OS | Notes |
|
||||
|-----------------------------------|----|----|:------|
|
||||
| [scikit-learn][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The machine learning library. A complex but clean config using many of cibuildwheel's features to build a large project with Cython and C++ extensions. |
|
||||
| [scikit-learn][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![pyodide icon][] | The machine learning library. A complex but clean config using many of cibuildwheel's features to build a large project with Cython and C++ extensions. |
|
||||
| [duckdb][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | DuckDB is an analytical in-process SQL database management system |
|
||||
| [pytorch-fairseq][] | ![github icon][] | ![apple icon][] ![linux icon][] | Facebook AI Research Sequence-to-Sequence Toolkit written in Python. |
|
||||
| [NumPy][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The fundamental package for scientific computing with Python. |
|
||||
| [NumPy][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![pyodide icon][] | The fundamental package for scientific computing with Python. |
|
||||
| [NCNN][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | ncnn is a high-performance neural network inference framework optimized for the mobile platform |
|
||||
| [Matplotlib][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The venerable Matplotlib, a Python library with C++ portions |
|
||||
| [Matplotlib][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![pyodide icon][] | The venerable Matplotlib, a Python library with C++ portions |
|
||||
| [Tornado][] | ![github icon][] | ![linux icon][] ![apple icon][] ![windows icon][] | Tornado is a Python web framework and asynchronous networking library. Uses stable ABI for a small C extension. |
|
||||
| [MyPy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | The compiled version of MyPy using MyPyC. |
|
||||
| [Prophet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Tool for producing high quality forecasts for time series data that has multiple seasonality with linear or non-linear growth. |
|
||||
| [Kivy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Open source UI framework written in Python, running on Windows, Linux, macOS, Android and iOS |
|
||||
| [Triton][] | ![github icon][] | ![linux icon][] | Self hosted runners |
|
||||
| [Kivy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Open source UI framework written in Python, running on Windows, Linux, macOS, Android and iOS |
|
||||
| [MemRay][] | ![github icon][] | ![linux icon][] | Memray is a memory profiler for Python |
|
||||
| [uvloop][] | ![github icon][] | ![apple icon][] ![linux icon][] | Ultra fast asyncio event loop. |
|
||||
| [psutil][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Cross-platform lib for process and system monitoring in Python |
|
||||
@@ -30,7 +30,7 @@ title: Working examples
|
||||
| [asyncpg][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A fast PostgreSQL Database Client Library for Python/asyncio. |
|
||||
| [cmake][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
|
||||
| [pyinstrument][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python profiler with a C extension. No external dependencies. |
|
||||
| [scikit-image][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Image processing library. Uses cibuildwheel to build and test a project that uses Cython with platform-native code. |
|
||||
| [scikit-image][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![pyodide icon][] | Image processing library. Uses cibuildwheel to build and test a project that uses Cython with platform-native code. |
|
||||
| [cvxpy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A Python-embedded modeling language for convex optimization problems. |
|
||||
| [PyOxidizer][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A modern Python application packaging and distribution tool |
|
||||
| [pedalboard][] | ![github icon][] | ![windows icon][] ![linux icon][] ![apple icon][] | A Python library for working with audio data and audio plugins by wrapping the [JUCE](https://github.com/juce-framework/JUCE/) C++ framework. Uses cibuildwheel to deploy on as many operating systems and Python versions as possible with only one dependency (any NumPy). |
|
||||
@@ -42,7 +42,7 @@ title: Working examples
|
||||
| [Dependency Injector][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Dependency injection framework for Python, uses Windows TravisCI |
|
||||
| [UltraJSON][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Ultra fast JSON decoder and encoder written in C with Python bindings |
|
||||
| [CTranslate2][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes libraries from the [Intel oneAPI toolkit](https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit.html) and CUDA kernels compiled for multiple GPU architectures. |
|
||||
| [pyzmq][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python bindings for zeromq, the networking library. Uses Cython on CPython and CFFI on PyPy. ARM wheels for linux are built natively on GitHub Actions. |
|
||||
| [pyzmq][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![android icon][] | Python bindings for zeromq, the networking library. Uses Cython on CPython and CFFI on PyPy. ARM wheels for linux are built natively on GitHub Actions. |
|
||||
| [Implicit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes GPU support for linux wheels |
|
||||
| [tinyobjloader][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Tiny but powerful single file wavefront obj loader |
|
||||
| [vispy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Main repository for Vispy |
|
||||
@@ -67,19 +67,19 @@ title: Working examples
|
||||
| [Parselmouth][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. |
|
||||
| [H3-py][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for H3, a hierarchical hexagonal geospatial indexing system |
|
||||
| [AutoPy][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
||||
| [DeepForest][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | An Efficient, Scalable and Optimized Python Framework for Deep Forest (2021.2.1) |
|
||||
| [time-machine][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Time mocking library using only the CPython C API. |
|
||||
| [DeepForest][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | An Efficient, Scalable and Optimized Python Framework for Deep Forest (2021.2.1) |
|
||||
| [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. |
|
||||
| [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 |
|
||||
| [pybind11 cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a CMake-based build system |
|
||||
| [pybind11 cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![pyodide icon][] | Example pybind11 module built with a CMake-based build system |
|
||||
| [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. |
|
||||
| [sourmash][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Quickly search, compare, and analyze genomic and metagenomic data sets. |
|
||||
| [sourmash][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] ![pyodide icon][] | Quickly search, compare, and analyze genomic and metagenomic data sets. |
|
||||
| [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] | ![windows icon][] ![linux icon][] | Python wrapper around rapidjson |
|
||||
| [pybind11 python_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a Python-based build system |
|
||||
| [pybind11 python_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![pyodide icon][] | Example pybind11 module built with a Python-based build system |
|
||||
| [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 |
|
||||
| [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` |
|
||||
@@ -87,20 +87,20 @@ title: Working examples
|
||||
| [cyvcf2][] | ![github icon][] | ![apple icon][] ![linux icon][] | cython + htslib == fast VCF and BCF processing |
|
||||
| [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 |
|
||||
| [pillow-heif][] | ![github icon][] ![cirrusci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Bindings to libheif library with third party dependencies. Fully automated CI for tests and publishing including Apple Silicon builds. |
|
||||
| [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![pyodide icon][] | Jupyter-friendly Python interface for C++ MINUIT2 |
|
||||
| [pillow-heif][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Bindings to libheif library with third party dependencies. Fully automated CI for tests and publishing including Apple Silicon builds. |
|
||||
| [keyvi][] | ![github icon][] | ![linux icon][] ![apple icon][] | FST based key value index highly optimized for size and lookup performance, utilizes ccache action for improved runtime |
|
||||
| [PyGLM][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Fast OpenGL Mathematics (GLM) for Python |
|
||||
| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 |
|
||||
| [power-grid-model][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python/C++ library for distribution power system analysis |
|
||||
| [TgCrypto][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
||||
| [streaming-form-data][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Streaming parser for multipart/form-data written in Cython |
|
||||
| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python |
|
||||
| [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. |
|
||||
| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![android icon][] ![ios icon][] ![pyodide icon][] | setuptools backend with custom CMake step for external sources. SBOM embedded via a custom repair step. |
|
||||
| [boost-histogram][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![pyodide icon][] | Supports full range of wheels, including PyPy and alternate archs. |
|
||||
| [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. |
|
||||
| [Python-WebRTC][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | a Python extension that provides bindings to WebRTC M92 |
|
||||
| [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | An example combining scikit-build and pybind11 |
|
||||
| [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![pyodide icon][] | An example combining scikit-build and pybind11 |
|
||||
| [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms |
|
||||
| [Arbor][] | ![github icon][] | ![apple icon][] ![linux icon][] | Arbor is a multi-compartment neuron simulation library; compatible with next-generation accelerators; best-practices applied to research software; focused on community-driven development. Includes a [small script](https://github.com/arbor-sim/arbor/blob/master/scripts/patchwheel.py) patching `rpath` in bundled libraries. |
|
||||
| [clang-format][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Scikit-build wrapper around LLVM's CMake, all platforms, generic wheels. |
|
||||
@@ -128,8 +128,8 @@ title: Working examples
|
||||
[Tornado]: https://github.com/tornadoweb/tornado
|
||||
[MyPy]: https://github.com/mypyc/mypy_mypyc-wheels
|
||||
[Prophet]: https://github.com/facebook/prophet
|
||||
[Kivy]: https://github.com/kivy/kivy
|
||||
[Triton]: https://github.com/openai/triton
|
||||
[Kivy]: https://github.com/kivy/kivy
|
||||
[MemRay]: https://github.com/bloomberg/memray
|
||||
[uvloop]: https://github.com/MagicStack/uvloop
|
||||
[psutil]: https://github.com/giampaolo/psutil
|
||||
@@ -178,8 +178,8 @@ title: Working examples
|
||||
[Parselmouth]: https://github.com/YannickJadoul/Parselmouth
|
||||
[H3-py]: https://github.com/uber/h3-py
|
||||
[AutoPy]: https://github.com/autopilot-rs/autopy
|
||||
[DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest
|
||||
[time-machine]: https://github.com/adamchainz/time-machine
|
||||
[DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest
|
||||
[mosec]: https://github.com/mosecorg/mosec
|
||||
[Picologging]: https://github.com/microsoft/picologging
|
||||
[markupsafe]: https://github.com/pallets/markupsafe
|
||||
@@ -206,10 +206,10 @@ title: Working examples
|
||||
[power-grid-model]: https://github.com/PowerGridModel/power-grid-model
|
||||
[TgCrypto]: https://github.com/pyrogram/tgcrypto
|
||||
[streaming-form-data]: https://github.com/siddhantgoel/streaming-form-data
|
||||
[pybase64]: https://github.com/mayeut/pybase64
|
||||
[Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build
|
||||
[bx-python]: https://github.com/bxlab/bx-python
|
||||
[pybase64]: https://github.com/mayeut/pybase64
|
||||
[boost-histogram]: https://github.com/scikit-hep/boost-histogram
|
||||
[bx-python]: https://github.com/bxlab/bx-python
|
||||
[Python-WebRTC]: https://github.com/MarshalX/python-webrtc
|
||||
[pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example
|
||||
[fathon]: https://github.com/stfbnc/fathon
|
||||
@@ -235,10 +235,12 @@ title: Working examples
|
||||
[circleci icon]: data/readme_icons/circleci.svg
|
||||
[gitlab icon]: data/readme_icons/gitlab.svg
|
||||
[travisci icon]: data/readme_icons/travisci.svg
|
||||
[cirrusci icon]: data/readme_icons/cirrusci.svg
|
||||
[windows icon]: data/readme_icons/windows.svg
|
||||
[apple icon]: data/readme_icons/apple.svg
|
||||
[linux icon]: data/readme_icons/linux.svg
|
||||
[android icon]: data/readme_icons/android.svg
|
||||
[ios icon]: data/readme_icons/ios.svg
|
||||
[pyodide icon]: data/readme_icons/pyodide.svg
|
||||
|
||||
<!-- END bin/projects.py -->
|
||||
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
||||
install_cibuildwheel_script:
|
||||
- python -m pip install cibuildwheel==3.4.1
|
||||
run_cibuildwheel_script:
|
||||
- cibuildwheel
|
||||
wheels_artifacts:
|
||||
path: "wheelhouse/*"
|
||||
|
||||
|
||||
macos_task:
|
||||
name: Build macOS x86_64 and arm64 wheels.
|
||||
macos_instance:
|
||||
image: ghcr.io/cirruslabs/macos-runner:sonoma
|
||||
env:
|
||||
VENV_ROOT: ${HOME}/venv-cibuildwheel
|
||||
PATH: ${VENV_ROOT}/bin:${PATH}
|
||||
CIBW_ARCHS_MACOS: x86_64 arm64
|
||||
install_pre_requirements_script:
|
||||
- brew install python@3.12
|
||||
- python3.12 -m venv ${VENV_ROOT}
|
||||
<<: *BUILD_AND_STORE_WHEELS
|
||||
@@ -1,74 +0,0 @@
|
||||
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
||||
install_cibuildwheel_script:
|
||||
- python -m pip install cibuildwheel==3.4.1
|
||||
run_cibuildwheel_script:
|
||||
- cibuildwheel
|
||||
wheels_artifacts:
|
||||
path: "wheelhouse/*"
|
||||
|
||||
|
||||
linux_x86_task:
|
||||
name: Build Linux x86 wheels.
|
||||
compute_engine_instance:
|
||||
image_project: cirrus-images
|
||||
image: family/docker-builder
|
||||
platform: linux
|
||||
cpu: 4
|
||||
memory: 4G
|
||||
env:
|
||||
VENV_ROOT: ${HOME}/venv-cibuildwheel
|
||||
PATH: ${VENV_ROOT}/bin:${PATH}
|
||||
install_pre_requirements_script:
|
||||
- add-apt-repository -y ppa:deadsnakes/ppa
|
||||
- apt-get update
|
||||
- apt-get install -y python3.12-venv
|
||||
- python3.12 -m venv ${VENV_ROOT}
|
||||
<<: *BUILD_AND_STORE_WHEELS
|
||||
|
||||
linux_aarch64_task:
|
||||
name: Build Linux aarch64 wheels.
|
||||
compute_engine_instance:
|
||||
image_project: cirrus-images
|
||||
image: family/docker-builder-arm64
|
||||
architecture: arm64
|
||||
platform: linux
|
||||
cpu: 4
|
||||
memory: 4G
|
||||
env:
|
||||
VENV_ROOT: ${HOME}/venv-cibuildwheel
|
||||
PATH: ${VENV_ROOT}/bin:${PATH}
|
||||
install_pre_requirements_script:
|
||||
- add-apt-repository -y ppa:deadsnakes/ppa
|
||||
- apt-get update
|
||||
- apt-get install -y python3.12-venv
|
||||
- python3.12 -m venv ${VENV_ROOT}
|
||||
<<: *BUILD_AND_STORE_WHEELS
|
||||
|
||||
windows_x86_task:
|
||||
name: Build Windows x86 wheels.
|
||||
windows_container:
|
||||
image: cirrusci/windowsservercore:visualstudio2022
|
||||
cpu: 4
|
||||
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
|
||||
- powershell -Command "$cleanPath = $env:PATH -replace ';+$', ''; Add-Content -Path $env:CIRRUS_ENV -Value ('PATH=' + $cleanPath)"
|
||||
|
||||
<<: *BUILD_AND_STORE_WHEELS
|
||||
|
||||
macos_arm64_task:
|
||||
name: Build macOS arm64 wheels.
|
||||
macos_instance:
|
||||
image: ghcr.io/cirruslabs/macos-runner:sequoia
|
||||
env:
|
||||
VENV_ROOT: ${HOME}/venv-cibuildwheel
|
||||
PATH: ${VENV_ROOT}/bin:${PATH}
|
||||
install_pre_requirements_script:
|
||||
- brew install python@3.12
|
||||
- python3.12 -m venv ${VENV_ROOT}
|
||||
<<: *BUILD_AND_STORE_WHEELS
|
||||
@@ -34,6 +34,7 @@ nav:
|
||||
- About:
|
||||
- contributing.md
|
||||
- changelog.md
|
||||
- Source repository: https://github.com/pypa/cibuildwheel
|
||||
|
||||
markdown_extensions:
|
||||
- md_in_html
|
||||
|
||||
+15
-12
@@ -69,12 +69,10 @@ def update_constraints(session: nox.Session) -> None:
|
||||
Update the dependencies inplace.
|
||||
"""
|
||||
|
||||
session.install("-e.", "click")
|
||||
|
||||
resources = Path("cibuildwheel/resources")
|
||||
|
||||
if session.venv_backend != "uv":
|
||||
session.install("uv>=0.1.23")
|
||||
session.install("uv>=0.9")
|
||||
|
||||
# CUSTOM_COMPILE_COMMAND is a pip-compile option that tells users how to
|
||||
# regenerate the constraints files
|
||||
@@ -108,8 +106,7 @@ def update_constraints(session: nox.Session) -> None:
|
||||
|
||||
tmp_file = Path(session.create_tmp()) / "constraints-pyodide.in"
|
||||
|
||||
session.run(
|
||||
"python",
|
||||
session.install_and_run_script(
|
||||
"bin/generate_pyodide_constraints.py",
|
||||
"--output-file",
|
||||
tmp_file,
|
||||
@@ -135,13 +132,11 @@ def update_pins(session: nox.Session) -> None:
|
||||
Update the python, docker, virtualenv, node, and python-build-standalone
|
||||
version pins inplace.
|
||||
"""
|
||||
pyproject = nox.project.load_toml()
|
||||
session.install("-e.", *nox.project.dependency_groups(pyproject, "bin"))
|
||||
session.run("python", "bin/update_pythons.py", "--force")
|
||||
session.run("python", "bin/update_docker.py")
|
||||
session.run("python", "bin/update_virtualenv.py", "--force")
|
||||
session.run("python", "bin/update_nodejs.py", "--force")
|
||||
session.run("python", "bin/update_python_build_standalone.py")
|
||||
session.install_and_run_script("bin/update_pythons.py", "--force")
|
||||
session.install_and_run_script("bin/update_docker.py")
|
||||
session.install_and_run_script("bin/update_virtualenv.py", "--force")
|
||||
session.install_and_run_script("bin/update_nodejs.py", "--force")
|
||||
session.install_and_run_script("bin/update_python_build_standalone.py")
|
||||
|
||||
|
||||
@nox.session(default=False, reuse_venv=True, tags=["update"])
|
||||
@@ -184,6 +179,14 @@ def docs(session: nox.Session) -> None:
|
||||
session.run("mkdocs", "serve" if session.interactive else "build", "--strict", *session.posargs)
|
||||
|
||||
|
||||
@nox.session(default=False)
|
||||
def update_how_it_works_image(session: nox.Session) -> None:
|
||||
"""
|
||||
Generate the how it works image.
|
||||
"""
|
||||
session.install_and_run_script("bin/update_how_it_works_image.py")
|
||||
|
||||
|
||||
@nox.session(default=False)
|
||||
def build(session: nox.Session) -> None:
|
||||
"""
|
||||
|
||||
@@ -66,15 +66,6 @@ Documentation = "https://cibuildwheel.pypa.io"
|
||||
Homepage = "https://github.com/pypa/cibuildwheel"
|
||||
|
||||
[dependency-groups]
|
||||
bin = [
|
||||
"click",
|
||||
"packaging>=21.0",
|
||||
"pip-tools",
|
||||
"pygithub",
|
||||
"pyyaml",
|
||||
"requests",
|
||||
"rich>=9.6",
|
||||
]
|
||||
docs = [
|
||||
"jinja2>=3.1.2",
|
||||
"mkdocs-include-markdown-plugin==6.2.2",
|
||||
@@ -97,7 +88,6 @@ test = [
|
||||
"xdoctest",
|
||||
]
|
||||
dev = [
|
||||
{include-group = "bin"},
|
||||
{include-group = "docs"},
|
||||
{include-group = "test"},
|
||||
]
|
||||
@@ -138,7 +128,6 @@ module = [
|
||||
"setuptools._distutils.util",
|
||||
"bashlex",
|
||||
"bashlex.*",
|
||||
"importlib_resources",
|
||||
]
|
||||
ignore_missing_imports = true
|
||||
|
||||
|
||||
@@ -42,11 +42,7 @@ if "ANDROID_HOME" not in os.environ:
|
||||
|
||||
# Fail if we're on a CI service which is supposed to have the Android SDK
|
||||
# pre-installed; otherwise skip the module.
|
||||
if (
|
||||
("CIRRUS_CI" in os.environ and platform.system() == "Darwin")
|
||||
or "GITHUB_ACTIONS" in os.environ
|
||||
or "TF_BUILD" in os.environ
|
||||
):
|
||||
if "GITHUB_ACTIONS" in os.environ or "TF_BUILD" in os.environ:
|
||||
pytest.fail(msg)
|
||||
else:
|
||||
pytest.skip(msg, allow_module_level=True)
|
||||
|
||||
@@ -7,8 +7,6 @@ from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from cibuildwheel.ci import CIProvider, detect_ci_provider
|
||||
|
||||
from . import test_projects, utils
|
||||
|
||||
pytestmark = pytest.mark.ios
|
||||
@@ -36,11 +34,6 @@ def skip_if_ios_testing_not_supported() -> None:
|
||||
pytest.skip("this test can only run on macOS")
|
||||
if utils.get_xcode_version() < (13, 0):
|
||||
pytest.skip("this test only works with Xcode 13.0 or greater")
|
||||
if detect_ci_provider() == CIProvider.cirrus_ci:
|
||||
pytest.skip(
|
||||
"iOS testing not currently supported on Cirrus CI due to a failure "
|
||||
"to start the simulator."
|
||||
)
|
||||
|
||||
|
||||
# iOS tests shouldn't be run in parallel, because they're dependent on calling
|
||||
|
||||
@@ -35,7 +35,6 @@ include_graalpy_in_expected_wheels: bool = True
|
||||
_AARCH64_CAN_RUN_ARMV7: Final[bool] = Architecture.aarch64.value not in EMULATED_ARCHS and {
|
||||
None: Architecture.armv7l.value not in EMULATED_ARCHS,
|
||||
CIProvider.travis_ci: False,
|
||||
CIProvider.cirrus_ci: False,
|
||||
}.get(detect_ci_provider(), True)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user