Compare commits

...
18 Commits
Author SHA1 Message Date
Joe Rickerby d04cacbc98 Bump version: v2.23.2 2025-03-24 21:25:38 +00:00
Matthieu Darbois 5f4e019684 [2.x] Update dependencies (#2334) 2025-03-24 21:17:56 +00:00
Henry Schreiner 2efa648f38 fix: always resolve --python argument (#2328) (#2331)
fix: always resolve --python argument (#2328)

fix: always resolve the --python argument

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2025-03-23 15:03:30 -04:00
Joe Rickerby 42728e866b Bump version: v2.23.1 2025-03-15 17:58:14 +00:00
Joe Rickerby 6e1527b153 Fix unit test when other warnings are present 2025-03-15 17:54:37 +00:00
Matthieu Darbois c25fe60385 fix: image deprecation warning (#2314) 2025-03-15 17:54:37 +00:00
Henry SchreinerandJoe Rickerby a880bf5105 fix: warn on deprecated images being set (#2312)
* fix: warn on deprecated images being set

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

* fix: handle repeated warning messages

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

* Apply suggestions from code review

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

* fix: try making the warnings once per Options

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

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Joe Rickerby <joerick@mac.com>
2025-03-15 17:54:37 +00:00
Joe Rickerby c087d85b69 Update dependencies 2025-03-15 17:54:37 +00:00
Joe Rickerby 6cccd09a31 Bump version: v2.23.0 2025-03-01 13:27:50 +00:00
Matthieu Darbois aa1534d2a3 chore(2.x): update dependencies (#2294) 2025-03-01 11:49:19 +00:00
mayeut ee23dd147b fix(test): implement retry for test_container_removed
The test is flaky on some platforms. Implement retry rather than just skip.
2025-02-25 14:22:19 -05:00
Matthieu Darbois 55037e9716 ci/doc: move azure macOS build to macOS-13 (#2101)
The macOS-12 environment is deprecated.
2025-02-25 14:22:19 -05:00
Joe Rickerby 8874ee2048 Remove specific Python versions from the update-dependencies job
The requirements pinning is done by uv now, so we don't need to
run the versions of Python to do the pinning anymore.

Cherry-picked from 37f7f611b208f48d4bb80a35eb31e39e47102930
2025-02-25 14:22:19 -05:00
mayeut f76d345e81 chore: bump dependencies 2025-02-25 14:22:19 -05:00
Agriya Khetarpal 5a5e514fbd Bump to Pyodide 0.27 (#2117)
* Bump to Pyodide 0.27

* Update the Pyodide target's constraints
2025-02-25 14:22:19 -05:00
Matthieu Darbois 017abbba68 feature: add PyPy 3.11 (#2268) 2025-02-25 14:22:19 -05:00
Matthieu Darbois bb1fd3320e feat: Add support for ubuntu-24.04-arm GHA runner (#2135)
* ci(gha): add tests on ubuntu-24.04-arm

* address review comments
2025-02-25 14:22:19 -05:00
Matthieu Darbois 98a6f3bf64 chore: use pypa/manylinux for manylinux_2_31_armv7l (#2269) 2025-02-25 14:22:19 -05:00
42 changed files with 305 additions and 216 deletions
+4 -3
View File
@@ -4,6 +4,7 @@ on:
push: push:
branches: branches:
- main - main
- 2.x
pull_request: pull_request:
paths-ignore: paths-ignore:
- 'docs/**' - 'docs/**'
@@ -37,7 +38,7 @@ jobs:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
matrix: matrix:
os: [ubuntu-latest, windows-latest, macos-13, macos-14] os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-13, macos-14]
python_version: ['3.13'] python_version: ['3.13']
include: include:
- os: ubuntu-latest - os: ubuntu-latest
@@ -89,7 +90,7 @@ jobs:
with: with:
package-dir: sample_proj package-dir: sample_proj
output-dir: wheelhouse_only output-dir: wheelhouse_only
only: cp312-${{ runner.os == 'Linux' && 'manylinux_x86_64' || (runner.os == 'Windows' && 'win_amd64' || 'macosx_x86_64') }} only: cp312-${{ runner.os == 'Linux' && (runner.arch == 'ARM64' && 'manylinux_aarch64' || 'manylinux_x86_64') || (runner.os == 'Windows' && 'win_amd64' || 'macosx_x86_64') }}
- name: Create custom configuration file - name: Create custom configuration file
shell: bash shell: bash
@@ -124,7 +125,7 @@ jobs:
- name: Test cibuildwheel - name: Test cibuildwheel
run: | run: |
uv run bin/run_tests.py --run-podman uv run bin/run_tests.py ${{ (runner.os == 'Linux' && runner.arch == 'X64') && '--run-podman' || '' }}
emulated-archs: emulated-archs:
name: Get qemu emulated architectures name: Get qemu emulated architectures
@@ -33,8 +33,6 @@ jobs:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: wntrblm/nox@2024.10.09 - uses: wntrblm/nox@2024.10.09
with:
python-versions: "3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13"
- name: "Run update: dependencies" - name: "Run update: dependencies"
run: nox --force-color -s update_constraints run: nox --force-color -s update_constraints
+27 -34
View File
@@ -38,6 +38,7 @@ While cibuildwheel itself requires a recent Python version to run (we support th
| PyPy 3.8 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | | PyPy 3.8 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A |
| PyPy 3.9 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | | PyPy 3.9 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A |
| PyPy 3.10 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | N/A | N/A | | PyPy 3.10 v7.3 | ✅ | ✅ | ✅ | 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 |
<sup>¹ PyPy is only supported for manylinux wheels.</sup><br> <sup>¹ PyPy is only supported for manylinux wheels.</sup><br>
<sup>² Windows arm64 support is experimental.</sup><br> <sup>² Windows arm64 support is experimental.</sup><br>
@@ -59,7 +60,7 @@ Usage
| | Linux | macOS | Windows | Linux ARM | macOS ARM | Windows ARM | | | Linux | macOS | Windows | Linux ARM | macOS ARM | Windows ARM |
|-----------------|-------|-------|---------|-----------|-----------|-------------| |-----------------|-------|-------|---------|-----------|-----------|-------------|
| GitHub Actions | ✅ | ✅ | ✅ | ✅¹ | ✅ | ✅² | | GitHub Actions | ✅ | ✅ | ✅ | ✅ | ✅ | ✅² |
| Azure Pipelines | ✅ | ✅ | ✅ | | ✅ | ✅² | | Azure Pipelines | ✅ | ✅ | ✅ | | ✅ | ✅² |
| Travis CI | ✅ | | ✅ | ✅ | | | | Travis CI | ✅ | | ✅ | ✅ | | |
| AppVeyor | ✅ | ✅ | ✅ | | ✅ | ✅² | | AppVeyor | ✅ | ✅ | ✅ | | ✅ | ✅² |
@@ -88,7 +89,7 @@ jobs:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
matrix: matrix:
os: [ubuntu-latest, windows-latest, macos-13, macos-latest] os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-13, macos-latest]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@@ -97,7 +98,7 @@ jobs:
- uses: actions/setup-python@v5 - uses: actions/setup-python@v5
- name: Install cibuildwheel - name: Install cibuildwheel
run: python -m pip install cibuildwheel==2.22.0 run: python -m pip install cibuildwheel==2.23.2
- name: Build wheels - name: Build wheels
run: python -m cibuildwheel --output-dir wheelhouse run: python -m cibuildwheel --output-dir wheelhouse
@@ -214,6 +215,29 @@ Changelog
<!-- this section was generated by bin/update_readme_changelog.py -- do not edit manually --> <!-- this section was generated by bin/update_readme_changelog.py -- do not edit manually -->
### v2.23.2
_24 March 2025_
- 🐛 Workaround an issue with pyodide builds when running cibuildwheel with a Python that was installed via UV (#2328 via #2331)
- 🛠 Dependency updates, including a manylinux update that fixes an ['undefined symbol' error](https://github.com/pypa/manylinux/issues/1760) in gcc-toolset (#2334)
### v2.23.1
_15 March 2025_
- ⚠️ Added warnings when the shorthand values `manylinux1`, `manylinux2010`, `manylinux_2_24`, and `musllinux_1_1` are used to specify the images in linux builds. The shorthand to these (unmaintainted) images will be removed in v3.0. If you want to keep using these images, explicitly opt-in using the full image URL, which can be found in [this file](https://github.com/pypa/cibuildwheel/blob/v2.23.1/cibuildwheel/resources/pinned_docker_images.cfg). (#2312)
- 🛠 Dependency updates, including a manylinux update which fixes an [issue with rustup](https://github.com/pypa/cibuildwheel/issues/2303). (#2315)
### v2.23.0
_1 March 2025_
- ✨ Adds official support for the new GitHub Actions Arm runners. In fact these worked out-of-the-box, now we include them in our tests and example configs. (#2135 via #2281)
- ✨ Adds support for building PyPy 3.11 wheels (#2268 via #2281)
- 🛠 Adopts the beta pypa/manylinux image for armv7l builds (#2269 via #2281)
- 🛠 Dependency updates, including Pyodide 0.27 (#2117 and #2281)
### v2.22.0 ### v2.22.0
_23 November 2024_ _23 November 2024_
@@ -240,37 +264,6 @@ _9 October 2024_
- 🛠 Update CPython 3.13 to 3.13.0 final release (#2032) - 🛠 Update CPython 3.13 to 3.13.0 final release (#2032)
- 📚 Docs updates and tidy ups (#2035) - 📚 Docs updates and tidy ups (#2035)
### v2.21.2
_2 October 2024_
- ✨ Adds support for building 32-bit armv7l wheels on musllinux. On a Linux system with emulation set up, set [CIBW_ARCHS](https://cibuildwheel.pypa.io/en/stable/options/#archs) to `armv7l` on Linux to try it out if you're interested! (#2017)
- 🐛 Fix Linux Podman builds on some systems (#2016)
- ✨ Adds official support for running on Python 3.13 (#2026)
- 🛠 Update CPython 3.13 to 3.13.0rc3 (#2029)
Note: the default [manylinux image](https://cibuildwheel.pypa.io/en/stable/options/#linux-image) is **scheduled to change** from `manylinux2014` to `manylinux_2_28` in a cibuildwheel release on or after **6th May 2025** - you can set the value now to avoid getting upgraded if you want. (#1992)
### v2.21.1
_16 September 2024_
- 🐛 Fix a bug in the Linux build, where files copied to the container would have invalid ownership permissions (#2007)
- 🐛 Fix a bug on Windows where cibuildwheel would call upon `uv` to install dependencies for versions of CPython that it does not support (#2005)
- 🐛 Fix a bug where `uv 0.4.10` would not use the right Python when testing on Linux. (#2008)
- 🛠 Bump our documentation pins, fixes an issue with a missing package (#2011)
### v2.21.0
_13 September 2024_
- ⚠️ Update CPython 3.12 to 3.12.6, which changes the macOS minimum deployment target on CPython 3.12 from macOS 10.9 to macOS 10.13 (#1998)
- 🛠 Changes the behaviour when inheriting `config-settings` in TOML overrides - rather than extending each key, which is rarely useful, individual keys will override previously set values. (#1803)
- 🛠 Update CPython 3.13 to 3.13.0rc2 (#1998)
- ✨ Adds support for multiarch OCI images (#1961)
- 🐛 Fixes some bugs building Linux wheels on macOS. (#1961)
- ⚠️ Changes the minimum version of Docker/Podman to Docker API version 1.43, Podman API version 3. The only mainstream runner this should affect is Travis Graviton2 runners - if so you can [upgrade your version of Docker](https://github.com/pypa/cibuildwheel/pull/1961#issuecomment-2304060019). (#1961)
<!-- END bin/update_readme_changelog.py --> <!-- END bin/update_readme_changelog.py -->
--- ---
+1 -1
View File
@@ -19,7 +19,7 @@ jobs:
python ./bin/run_tests.py python ./bin/run_tests.py
- job: macos_38 - job: macos_38
pool: {vmImage: 'macOS-12'} pool: {vmImage: 'macOS-13'}
steps: steps:
- task: UsePythonVersion@0 - task: UsePythonVersion@0
inputs: inputs:
+1 -1
View File
@@ -55,7 +55,7 @@ images = [
Image("manylinux_2_28", "pypy_x86_64", "quay.io/pypa/manylinux_2_28_x86_64", None), Image("manylinux_2_28", "pypy_x86_64", "quay.io/pypa/manylinux_2_28_x86_64", None),
Image("manylinux_2_28", "pypy_aarch64", "quay.io/pypa/manylinux_2_28_aarch64", None), Image("manylinux_2_28", "pypy_aarch64", "quay.io/pypa/manylinux_2_28_aarch64", None),
# manylinux_2_31 images # manylinux_2_31 images
Image("manylinux_2_31", "armv7l", "ghcr.io/mayeut/manylinux_2_31", None), Image("manylinux_2_31", "armv7l", "quay.io/pypa/manylinux_2_31_armv7l", None),
# musllinux_1_1 images # musllinux_1_1 images
Image("musllinux_1_1", "x86_64", "quay.io/pypa/musllinux_1_1_x86_64", None), Image("musllinux_1_1", "x86_64", "quay.io/pypa/musllinux_1_1_x86_64", None),
Image("musllinux_1_1", "i686", "quay.io/pypa/musllinux_1_1_i686", None), Image("musllinux_1_1", "i686", "quay.io/pypa/musllinux_1_1_i686", None),
+1 -1
View File
@@ -1,3 +1,3 @@
from __future__ import annotations from __future__ import annotations
__version__ = "2.22.0" __version__ = "2.23.2"
+17
View File
@@ -567,6 +567,7 @@ class Options:
self.command_line_arguments = command_line_arguments self.command_line_arguments = command_line_arguments
self.env = env self.env = env
self._defaults = defaults self._defaults = defaults
self._image_warnings: set[str] = set()
self.reader = OptionsReader( self.reader = OptionsReader(
None if defaults else self.config_file_path, None if defaults else self.config_file_path,
@@ -688,6 +689,20 @@ class Options:
allow_empty=allow_empty, allow_empty=allow_empty,
) )
def _check_pinned_image(self, value: str, pinned_images: Mapping[str, str]) -> None:
if (
value in {"manylinux1", "manylinux2010", "manylinux_2_24", "musllinux_1_1"}
and value not in self._image_warnings
):
self._image_warnings.add(value)
msg = (
f"Deprecated image {value!r}. This value will not work"
" in a future version of cibuildwheel. Either upgrade to a supported"
" image or continue using the deprecated image by pinning directly"
f" to {pinned_images[value]!r}."
)
log.warning(msg)
def build_options(self, identifier: str | None) -> BuildOptions: def build_options(self, identifier: str | None) -> BuildOptions:
""" """
Compute BuildOptions for a single run configuration. Compute BuildOptions for a single run configuration.
@@ -785,6 +800,7 @@ class Options:
# default to manylinux2014 # default to manylinux2014
image = pinned_images["manylinux2014"] image = pinned_images["manylinux2014"]
elif config_value in pinned_images: elif config_value in pinned_images:
self._check_pinned_image(config_value, pinned_images)
image = pinned_images[config_value] image = pinned_images[config_value]
else: else:
image = config_value image = config_value
@@ -799,6 +815,7 @@ class Options:
if not config_value: if not config_value:
image = pinned_images["musllinux_1_2"] image = pinned_images["musllinux_1_2"]
elif config_value in pinned_images: elif config_value in pinned_images:
self._check_pinned_image(config_value, pinned_images)
image = pinned_images[config_value] image = pinned_images[config_value]
else: else:
image = config_value image = config_value
+28 -22
View File
@@ -22,6 +22,7 @@ python_configurations = [
{ identifier = "pp38-manylinux_x86_64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" }, { identifier = "pp38-manylinux_x86_64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" },
{ identifier = "pp39-manylinux_x86_64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" }, { identifier = "pp39-manylinux_x86_64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" },
{ identifier = "pp310-manylinux_x86_64", version = "3.10", path_str = "/opt/python/pp310-pypy310_pp73" }, { identifier = "pp310-manylinux_x86_64", version = "3.10", path_str = "/opt/python/pp310-pypy310_pp73" },
{ identifier = "pp311-manylinux_x86_64", version = "3.11", path_str = "/opt/python/pp311-pypy311_pp73" },
{ identifier = "cp36-manylinux_aarch64", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp36-manylinux_aarch64", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
{ identifier = "cp37-manylinux_aarch64", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp37-manylinux_aarch64", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
{ identifier = "cp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/cp38-cp38" }, { identifier = "cp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/cp38-cp38" },
@@ -62,10 +63,12 @@ python_configurations = [
{ identifier = "pp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" }, { identifier = "pp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" },
{ identifier = "pp39-manylinux_aarch64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" }, { identifier = "pp39-manylinux_aarch64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" },
{ identifier = "pp310-manylinux_aarch64", version = "3.10", path_str = "/opt/python/pp310-pypy310_pp73" }, { identifier = "pp310-manylinux_aarch64", version = "3.10", path_str = "/opt/python/pp310-pypy310_pp73" },
{ identifier = "pp311-manylinux_aarch64", version = "3.11", path_str = "/opt/python/pp311-pypy311_pp73" },
{ identifier = "pp37-manylinux_i686", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" }, { identifier = "pp37-manylinux_i686", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" },
{ identifier = "pp38-manylinux_i686", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" }, { identifier = "pp38-manylinux_i686", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" },
{ identifier = "pp39-manylinux_i686", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" }, { identifier = "pp39-manylinux_i686", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" },
{ identifier = "pp310-manylinux_i686", version = "3.10", path_str = "/opt/python/pp310-pypy310_pp73" }, { identifier = "pp310-manylinux_i686", version = "3.10", path_str = "/opt/python/pp310-pypy310_pp73" },
{ identifier = "pp311-manylinux_i686", version = "3.11", path_str = "/opt/python/pp311-pypy311_pp73" },
{ identifier = "cp36-musllinux_x86_64", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp36-musllinux_x86_64", version = "3.6", path_str = "/opt/python/cp36-cp36m" },
{ identifier = "cp37-musllinux_x86_64", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp37-musllinux_x86_64", version = "3.7", path_str = "/opt/python/cp37-cp37m" },
{ identifier = "cp38-musllinux_x86_64", version = "3.8", path_str = "/opt/python/cp38-cp38" }, { identifier = "cp38-musllinux_x86_64", version = "3.8", path_str = "/opt/python/cp38-cp38" },
@@ -138,22 +141,24 @@ python_configurations = [
{ identifier = "cp311-macosx_x86_64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" }, { identifier = "cp311-macosx_x86_64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" },
{ identifier = "cp311-macosx_arm64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" }, { identifier = "cp311-macosx_arm64", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" },
{ identifier = "cp311-macosx_universal2", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" }, { identifier = "cp311-macosx_universal2", version = "3.11", url = "https://www.python.org/ftp/python/3.11.9/python-3.11.9-macos11.pkg" },
{ identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.7/python-3.12.7-macos11.pkg" }, { identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.9/python-3.12.9-macos11.pkg" },
{ identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.7/python-3.12.7-macos11.pkg" }, { identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.9/python-3.12.9-macos11.pkg" },
{ identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.7/python-3.12.7-macos11.pkg" }, { identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.9/python-3.12.9-macos11.pkg" },
{ identifier = "cp313-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" }, { identifier = "cp313-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.2/python-3.13.2-macos11.pkg" },
{ identifier = "cp313-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" }, { identifier = "cp313-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.2/python-3.13.2-macos11.pkg" },
{ identifier = "cp313-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" }, { identifier = "cp313-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.2/python-3.13.2-macos11.pkg" },
{ identifier = "cp313t-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" }, { identifier = "cp313t-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.2/python-3.13.2-macos11.pkg" },
{ identifier = "cp313t-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" }, { identifier = "cp313t-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.2/python-3.13.2-macos11.pkg" },
{ identifier = "cp313t-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0-macos11.pkg" }, { identifier = "cp313t-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.2/python-3.13.2-macos11.pkg" },
{ identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-osx64.tar.bz2" }, { identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-osx64.tar.bz2" },
{ identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_x86_64.tar.bz2" }, { identifier = "pp38-macosx_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 = "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" }, { identifier = "pp39-macosx_x86_64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-macos_x86_64.tar.bz2" },
{ identifier = "pp39-macosx_arm64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-macos_arm64.tar.bz2" }, { identifier = "pp39-macosx_arm64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-macos_arm64.tar.bz2" },
{ identifier = "pp310-macosx_x86_64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.17-macos_x86_64.tar.bz2" }, { identifier = "pp310-macosx_x86_64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.19-macos_x86_64.tar.bz2" },
{ identifier = "pp310-macosx_arm64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.17-macos_arm64.tar.bz2" }, { identifier = "pp310-macosx_arm64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.19-macos_arm64.tar.bz2" },
{ identifier = "pp311-macosx_x86_64", version = "3.11", url = "https://downloads.python.org/pypy/pypy3.11-v7.3.19-macos_x86_64.tar.bz2" },
{ identifier = "pp311-macosx_arm64", version = "3.11", url = "https://downloads.python.org/pypy/pypy3.11-v7.3.19-macos_arm64.tar.bz2" },
] ]
[windows] [windows]
@@ -170,25 +175,26 @@ python_configurations = [
{ identifier = "cp310-win_amd64", version = "3.10.11", arch = "64" }, { identifier = "cp310-win_amd64", version = "3.10.11", arch = "64" },
{ identifier = "cp311-win32", version = "3.11.9", arch = "32" }, { identifier = "cp311-win32", version = "3.11.9", arch = "32" },
{ identifier = "cp311-win_amd64", version = "3.11.9", arch = "64" }, { identifier = "cp311-win_amd64", version = "3.11.9", arch = "64" },
{ identifier = "cp312-win32", version = "3.12.7", arch = "32" }, { identifier = "cp312-win32", version = "3.12.9", arch = "32" },
{ identifier = "cp312-win_amd64", version = "3.12.7", arch = "64" }, { identifier = "cp312-win_amd64", version = "3.12.9", arch = "64" },
{ identifier = "cp313-win32", version = "3.13.0", arch = "32" }, { identifier = "cp313-win32", version = "3.13.2", arch = "32" },
{ identifier = "cp313t-win32", version = "3.13.0", arch = "32" }, { identifier = "cp313t-win32", version = "3.13.2", arch = "32" },
{ identifier = "cp313-win_amd64", version = "3.13.0", arch = "64" }, { identifier = "cp313-win_amd64", version = "3.13.2", arch = "64" },
{ identifier = "cp313t-win_amd64", version = "3.13.0", arch = "64" }, { identifier = "cp313t-win_amd64", version = "3.13.2", arch = "64" },
{ identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" }, { identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" },
{ identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" }, { identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" },
{ identifier = "cp311-win_arm64", version = "3.11.9", arch = "ARM64" }, { identifier = "cp311-win_arm64", version = "3.11.9", arch = "ARM64" },
{ identifier = "cp312-win_arm64", version = "3.12.7", arch = "ARM64" }, { identifier = "cp312-win_arm64", version = "3.12.9", arch = "ARM64" },
{ identifier = "cp313-win_arm64", version = "3.13.0", arch = "ARM64" }, { identifier = "cp313-win_arm64", version = "3.13.2", arch = "ARM64" },
{ identifier = "cp313t-win_arm64", version = "3.13.0", arch = "ARM64" }, { identifier = "cp313t-win_arm64", version = "3.13.2", arch = "ARM64" },
{ identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" }, { identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" },
{ identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" }, { identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" },
{ identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-win64.zip" }, { identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-win64.zip" },
{ identifier = "pp310-win_amd64", version = "3.10", arch = "64", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.17-win64.zip" }, { identifier = "pp310-win_amd64", version = "3.10", arch = "64", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.19-win64.zip" },
{ identifier = "pp311-win_amd64", version = "3.11", arch = "64", url = "https://downloads.python.org/pypy/pypy3.11-v7.3.19-win64.zip" },
] ]
[pyodide] [pyodide]
python_configurations = [ python_configurations = [
{ identifier = "cp312-pyodide_wasm32", version = "3.12", pyodide_version = "0.26.4", pyodide_build_version = "0.29.0", emscripten_version = "3.1.58", node_version = "v20" }, { identifier = "cp312-pyodide_wasm32", version = "3.12", pyodide_version = "0.27.0", pyodide_build_version = "0.29.2", emscripten_version = "3.1.58", node_version = "v20" },
] ]
@@ -2,7 +2,7 @@
# nox -s update_constraints # nox -s update_constraints
annotated-types==0.7.0 annotated-types==0.7.0
# via pydantic # via pydantic
anyio==4.6.2.post1 anyio==4.9.0
# via httpx # via httpx
auditwheel-emscripten==0.0.16 auditwheel-emscripten==0.0.16
# via pyodide-build # via pyodide-build
@@ -10,26 +10,26 @@ build==1.2.2.post1
# via # via
# -r .nox/update_constraints/tmp/constraints-pyodide.in # -r .nox/update_constraints/tmp/constraints-pyodide.in
# pyodide-build # pyodide-build
certifi==2024.8.30 certifi==2025.1.31
# via # via
# httpcore # httpcore
# httpx # httpx
# requests # requests
charset-normalizer==3.4.0 charset-normalizer==3.4.1
# via requests # via requests
click==8.1.7 click==8.1.8
# via typer # via typer
cmake==3.31.0.1 cmake==3.31.6
# via pyodide-build # via pyodide-build
distlib==0.3.9 distlib==0.3.9
# via virtualenv # via virtualenv
filelock==3.16.1 filelock==3.18.0
# via virtualenv # via virtualenv
h11==0.14.0 h11==0.14.0
# via httpcore # via httpcore
httpcore==1.0.7 httpcore==1.0.7
# via httpx # via httpx
httpx==0.27.2 httpx==0.28.1
# via unearth # via unearth
idna==3.10 idna==3.10
# via # via
@@ -48,19 +48,19 @@ packaging==24.2
# build # build
# pyodide-build # pyodide-build
# unearth # unearth
pip==24.3.1 pip==25.0.1
# via -r .nox/update_constraints/tmp/constraints-pyodide.in # via -r .nox/update_constraints/tmp/constraints-pyodide.in
platformdirs==4.3.6 platformdirs==4.3.7
# via virtualenv # via virtualenv
pydantic==2.10.0 pydantic==2.10.6
# via # via
# pyodide-build # pyodide-build
# pyodide-lock # pyodide-lock
pydantic-core==2.27.0 pydantic-core==2.27.2
# via pydantic # via pydantic
pygments==2.18.0 pygments==2.19.1
# via rich # via rich
pyodide-build==0.29.0 pyodide-build==0.29.2
# via -r .nox/update_constraints/tmp/constraints-pyodide.in # via -r .nox/update_constraints/tmp/constraints-pyodide.in
pyodide-cli==0.2.4 pyodide-cli==0.2.4
# via # via
@@ -79,35 +79,34 @@ rich==13.9.4
# pyodide-build # pyodide-build
# pyodide-cli # pyodide-cli
# typer # typer
ruamel-yaml==0.18.6 ruamel-yaml==0.18.10
# via pyodide-build # via pyodide-build
ruamel-yaml-clib==0.2.12 ruamel-yaml-clib==0.2.12
# via ruamel-yaml # via ruamel-yaml
shellingham==1.5.4 shellingham==1.5.4
# via typer # via typer
sniffio==1.3.1 sniffio==1.3.1
# via # via anyio
# anyio typer==0.15.2
# httpx
typer==0.13.1
# via # via
# auditwheel-emscripten # auditwheel-emscripten
# pyodide-build # pyodide-build
# pyodide-cli # pyodide-cli
typing-extensions==4.12.2 typing-extensions==4.12.2
# via # via
# anyio
# pydantic # pydantic
# pydantic-core # pydantic-core
# typer # typer
unearth==0.17.2 unearth==0.17.3
# via pyodide-build # via pyodide-build
urllib3==2.2.3 urllib3==2.3.0
# via requests # via requests
virtualenv==20.27.1 virtualenv==20.29.3
# via # via
# build # build
# pyodide-build # pyodide-build
wheel==0.45.0 wheel==0.45.1
# via # via
# auditwheel-emscripten # auditwheel-emscripten
# pyodide-build # pyodide-build
@@ -4,13 +4,13 @@ altgraph==0.17.4
# via macholib # via macholib
build==1.2.2.post1 build==1.2.2.post1
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
delocate==0.12.0 delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
distlib==0.3.9 distlib==0.3.9
# via virtualenv # via virtualenv
filelock==3.16.1 filelock==3.18.0
# via virtualenv # via virtualenv
importlib-metadata==8.5.0 importlib-metadata==8.6.1
# via build # via build
macholib==1.16.3 macholib==1.16.3
# via delocate # via delocate
@@ -18,17 +18,17 @@ packaging==24.2
# via # via
# build # build
# delocate # delocate
pip==24.3.1 pip==25.0.1
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
platformdirs==4.3.6 platformdirs==4.3.7
# via virtualenv # via virtualenv
pyproject-hooks==1.2.0 pyproject-hooks==1.2.0
# via build # via build
tomli==2.1.0 tomli==2.2.1
# via build # via build
typing-extensions==4.12.2 typing-extensions==4.12.2
# via delocate # via delocate
virtualenv==20.27.1 virtualenv==20.29.3
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
zipp==3.21.0 zipp==3.21.0
# via importlib-metadata # via importlib-metadata
@@ -4,11 +4,11 @@ altgraph==0.17.4
# via macholib # via macholib
build==1.2.2.post1 build==1.2.2.post1
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
delocate==0.12.0 delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
distlib==0.3.9 distlib==0.3.9
# via virtualenv # via virtualenv
filelock==3.16.1 filelock==3.18.0
# via virtualenv # via virtualenv
macholib==1.16.3 macholib==1.16.3
# via delocate # via delocate
@@ -16,13 +16,13 @@ packaging==24.2
# via # via
# build # build
# delocate # delocate
pip==24.3.1 pip==25.0.1
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
platformdirs==4.3.6 platformdirs==4.3.7
# via virtualenv # via virtualenv
pyproject-hooks==1.2.0 pyproject-hooks==1.2.0
# via build # via build
typing-extensions==4.12.2 typing-extensions==4.12.2
# via delocate # via delocate
virtualenv==20.27.1 virtualenv==20.29.3
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
@@ -4,11 +4,11 @@ altgraph==0.17.4
# via macholib # via macholib
build==1.2.2.post1 build==1.2.2.post1
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
delocate==0.12.0 delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
distlib==0.3.9 distlib==0.3.9
# via virtualenv # via virtualenv
filelock==3.16.1 filelock==3.18.0
# via virtualenv # via virtualenv
macholib==1.16.3 macholib==1.16.3
# via delocate # via delocate
@@ -16,13 +16,13 @@ packaging==24.2
# via # via
# build # build
# delocate # delocate
pip==24.3.1 pip==25.0.1
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
platformdirs==4.3.6 platformdirs==4.3.7
# via virtualenv # via virtualenv
pyproject-hooks==1.2.0 pyproject-hooks==1.2.0
# via build # via build
typing-extensions==4.12.2 typing-extensions==4.12.2
# via delocate # via delocate
virtualenv==20.27.1 virtualenv==20.29.3
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
@@ -4,11 +4,11 @@ altgraph==0.17.4
# via macholib # via macholib
build==1.2.2.post1 build==1.2.2.post1
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
delocate==0.12.0 delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
distlib==0.3.9 distlib==0.3.9
# via virtualenv # via virtualenv
filelock==3.16.1 filelock==3.18.0
# via virtualenv # via virtualenv
macholib==1.16.3 macholib==1.16.3
# via delocate # via delocate
@@ -16,13 +16,13 @@ packaging==24.2
# via # via
# build # build
# delocate # delocate
pip==24.3.1 pip==25.0.1
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
platformdirs==4.3.6 platformdirs==4.3.7
# via virtualenv # via virtualenv
pyproject-hooks==1.2.0 pyproject-hooks==1.2.0
# via build # via build
typing-extensions==4.12.2 typing-extensions==4.12.2
# via delocate # via delocate
virtualenv==20.27.1 virtualenv==20.29.3
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
@@ -18,17 +18,17 @@ packaging==24.2
# via # via
# build # build
# delocate # delocate
pip==24.3.1 pip==25.0.1
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
platformdirs==4.3.6 platformdirs==4.3.6
# via virtualenv # via virtualenv
pyproject-hooks==1.2.0 pyproject-hooks==1.2.0
# via build # via build
tomli==2.1.0 tomli==2.2.1
# via build # via build
typing-extensions==4.12.2 typing-extensions==4.12.2
# via delocate # via delocate
virtualenv==20.27.1 virtualenv==20.29.3
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
zipp==3.20.2 zipp==3.20.2
# via importlib-metadata # via importlib-metadata
@@ -4,13 +4,13 @@ altgraph==0.17.4
# via macholib # via macholib
build==1.2.2.post1 build==1.2.2.post1
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
delocate==0.12.0 delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
distlib==0.3.9 distlib==0.3.9
# via virtualenv # via virtualenv
filelock==3.16.1 filelock==3.18.0
# via virtualenv # via virtualenv
importlib-metadata==8.5.0 importlib-metadata==8.6.1
# via build # via build
macholib==1.16.3 macholib==1.16.3
# via delocate # via delocate
@@ -18,17 +18,17 @@ packaging==24.2
# via # via
# build # build
# delocate # delocate
pip==24.3.1 pip==25.0.1
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
platformdirs==4.3.6 platformdirs==4.3.7
# via virtualenv # via virtualenv
pyproject-hooks==1.2.0 pyproject-hooks==1.2.0
# via build # via build
tomli==2.1.0 tomli==2.2.1
# via build # via build
typing-extensions==4.12.2 typing-extensions==4.12.2
# via delocate # via delocate
virtualenv==20.27.1 virtualenv==20.29.3
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
zipp==3.21.0 zipp==3.21.0
# via importlib-metadata # via importlib-metadata
+5 -5
View File
@@ -4,11 +4,11 @@ altgraph==0.17.4
# via macholib # via macholib
build==1.2.2.post1 build==1.2.2.post1
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
delocate==0.12.0 delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
distlib==0.3.9 distlib==0.3.9
# via virtualenv # via virtualenv
filelock==3.16.1 filelock==3.18.0
# via virtualenv # via virtualenv
macholib==1.16.3 macholib==1.16.3
# via delocate # via delocate
@@ -16,13 +16,13 @@ packaging==24.2
# via # via
# build # build
# delocate # delocate
pip==24.3.1 pip==25.0.1
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
platformdirs==4.3.6 platformdirs==4.3.7
# via virtualenv # via virtualenv
pyproject-hooks==1.2.0 pyproject-hooks==1.2.0
# via build # via build
typing-extensions==4.12.2 typing-extensions==4.12.2
# via delocate # via delocate
virtualenv==20.27.1 virtualenv==20.29.3
# via -r cibuildwheel/resources/constraints.in # via -r cibuildwheel/resources/constraints.in
+2 -2
View File
@@ -1,3 +1,3 @@
url = "https://nodejs.org/dist/" url = "https://nodejs.org/dist/"
v22 = "v22.11.0" v22 = "v22.14.0"
v20 = "v20.18.0" v20 = "v20.19.0"
+21 -21
View File
@@ -1,58 +1,58 @@
[x86_64] [x86_64]
manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-29-76807b8 manylinux1 = quay.io/pypa/manylinux1_x86_64:2024-04-29-76807b8
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.11.16-1 manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.03.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.11.16-1 manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.03.23-1
musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.10.26-1 musllinux_1_1 = quay.io/pypa/musllinux_1_1_x86_64:2024.10.26-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2024.11.16-1 musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2025.03.23-1
[i686] [i686]
manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-29-76807b8 manylinux1 = quay.io/pypa/manylinux1_i686:2024-04-29-76807b8
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.11.16-1 manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.03.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.10.26-1 musllinux_1_1 = quay.io/pypa/musllinux_1_1_i686:2024.10.26-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2024.11.16-1 musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2025.03.23-1
[pypy_x86_64] [pypy_x86_64]
manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177 manylinux2010 = quay.io/pypa/manylinux2010_x86_64:2022-08-05-4535177
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2024.11.16-1 manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.03.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463 manylinux_2_24 = quay.io/pypa/manylinux_2_24_x86_64:2022-12-26-0d38463
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2024.11.16-1 manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.03.23-1
[pypy_i686] [pypy_i686]
manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177 manylinux2010 = quay.io/pypa/manylinux2010_i686:2022-08-05-4535177
manylinux2014 = quay.io/pypa/manylinux2014_i686:2024.11.16-1 manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.03.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463 manylinux_2_24 = quay.io/pypa/manylinux_2_24_i686:2022-12-26-0d38463
[aarch64] [aarch64]
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.11.16-1 manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.03.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.11.16-1 manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.03.23-1
musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.10.26-1 musllinux_1_1 = quay.io/pypa/musllinux_1_1_aarch64:2024.10.26-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2024.11.16-1 musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2025.03.23-1
[ppc64le] [ppc64le]
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2024.11.16-1 manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2025.03.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463 manylinux_2_24 = quay.io/pypa/manylinux_2_24_ppc64le:2022-12-26-0d38463
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2024.11.16-1 manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2025.03.23-1
musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.10.26-1 musllinux_1_1 = quay.io/pypa/musllinux_1_1_ppc64le:2024.10.26-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2024.11.16-1 musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2025.03.23-1
[s390x] [s390x]
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2024.11.16-1 manylinux2014 = quay.io/pypa/manylinux2014_s390x:2025.03.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463 manylinux_2_24 = quay.io/pypa/manylinux_2_24_s390x:2022-12-26-0d38463
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2024.11.16-1 manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2025.03.23-1
musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.10.26-1 musllinux_1_1 = quay.io/pypa/musllinux_1_1_s390x:2024.10.26-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2024.11.16-1 musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2025.03.23-1
[pypy_aarch64] [pypy_aarch64]
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2024.11.16-1 manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.03.23-1
manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463 manylinux_2_24 = quay.io/pypa/manylinux_2_24_aarch64:2022-12-26-0d38463
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2024.11.16-1 manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.03.23-1
[armv7l] [armv7l]
manylinux_2_31 = ghcr.io/mayeut/manylinux_2_31:2024.11.16-1 manylinux_2_31 = quay.io/pypa/manylinux_2_31_armv7l:2025.03.23-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2024.11.16-1 musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2025.03.23-1
+1 -1
View File
@@ -1,2 +1,2 @@
py36 = { version = "20.21.1", url = "https://github.com/pypa/get-virtualenv/blob/20.21.1/public/virtualenv.pyz?raw=true" } py36 = { version = "20.21.1", url = "https://github.com/pypa/get-virtualenv/blob/20.21.1/public/virtualenv.pyz?raw=true" }
default = { version = "20.27.1", url = "https://github.com/pypa/get-virtualenv/blob/20.27.1/public/virtualenv.pyz?raw=true" } default = { version = "20.29.3", url = "https://github.com/pypa/get-virtualenv/blob/20.29.3/public/virtualenv.pyz?raw=true" }
+4
View File
@@ -705,6 +705,10 @@ def virtualenv(
dependency_constraint_flags are ignored since nothing is installed in the dependency_constraint_flags are ignored since nothing is installed in the
venv. Otherwise, pip is installed, and setuptools + wheel if Python < 3.12. venv. Otherwise, pip is installed, and setuptools + wheel if Python < 3.12.
""" """
# virtualenv may fail if this is a symlink.
python = python.resolve()
assert python.exists() assert python.exists()
if use_uv: if use_uv:
+23
View File
@@ -4,6 +4,29 @@ title: Changelog
# Changelog # Changelog
### v2.23.2
_24 March 2025_
- 🐛 Workaround an issue with pyodide builds when running cibuildwheel with a Python that was installed via UV (#2328 via #2331)
- 🛠 Dependency updates, including a manylinux update that fixes an ['undefined symbol' error](https://github.com/pypa/manylinux/issues/1760) in gcc-toolset (#2334)
### v2.23.1
_15 March 2025_
- ⚠️ Added warnings when the shorthand values `manylinux1`, `manylinux2010`, `manylinux_2_24`, and `musllinux_1_1` are used to specify the images in linux builds. The shorthand to these (unmaintainted) images will be removed in v3.0. If you want to keep using these images, explicitly opt-in using the full image URL, which can be found in [this file](https://github.com/pypa/cibuildwheel/blob/v2.23.1/cibuildwheel/resources/pinned_docker_images.cfg). (#2312)
- 🛠 Dependency updates, including a manylinux update which fixes an [issue with rustup](https://github.com/pypa/cibuildwheel/issues/2303). (#2315)
### v2.23.0
_1 March 2025_
- ✨ Adds official support for the new GitHub Actions Arm runners. In fact these worked out-of-the-box, now we include them in our tests and example configs. (#2135 via #2281)
- ✨ Adds support for building PyPy 3.11 wheels (#2268 via #2281)
- 🛠 Adopts the beta pypa/manylinux image for armv7l builds (#2269 via #2281)
- 🛠 Dependency updates, including Pyodide 0.27 (#2117 and #2281)
### v2.22.0 ### v2.22.0
_23 November 2024_ _23 November 2024_
+3 -3
View File
@@ -142,7 +142,7 @@ There are two suggested methods for keeping cibuildwheel up to date that instead
If you use GitHub Actions for builds, you can use cibuildwheel as an action: If you use GitHub Actions for builds, you can use cibuildwheel as an action:
```yaml ```yaml
uses: pypa/cibuildwheel@v2.22.0 uses: pypa/cibuildwheel@v2.23.2
``` ```
This is a composite step that just runs cibuildwheel using pipx. You can set command-line options as `with:` parameters, and use `env:` as normal. This is a composite step that just runs cibuildwheel using pipx. You can set command-line options as `with:` parameters, and use `env:` as normal.
@@ -164,7 +164,7 @@ The second option, and the only one that supports other CI systems, is using a `
```bash ```bash
# requirements-cibw.txt # requirements-cibw.txt
cibuildwheel==2.22.0 cibuildwheel==2.23.2
``` ```
Then your install step would have `python -m pip install -r requirements-cibw.txt` in it. Your `.github/dependabot.yml` file could look like this: Then your install step would have `python -m pip install -r requirements-cibw.txt` in it. Your `.github/dependabot.yml` file could look like this:
@@ -328,7 +328,7 @@ Solutions to this vary, but the simplest is to use pipx:
# most runners have pipx preinstalled, but in case you don't # most runners have pipx preinstalled, but in case you don't
python3 -m pip install pipx python3 -m pip install pipx
pipx run cibuildwheel==2.22.0 --output-dir wheelhouse pipx run cibuildwheel==2.23.2 --output-dir wheelhouse
pipx run twine upload wheelhouse/*.whl pipx run twine upload wheelhouse/*.whl
``` ```
+18 -17
View File
@@ -302,6 +302,7 @@ When setting the options, you can use shell-style globbing syntax, as per [fnmat
| PyPy3.8 v7.3 | pp38-macosx_x86_64<br/>pp38-macosx_arm64 | pp38-win_amd64 | pp38-manylinux_x86_64<br/>pp38-manylinux_i686 | pp38-manylinux_aarch64 | | PyPy3.8 v7.3 | pp38-macosx_x86_64<br/>pp38-macosx_arm64 | pp38-win_amd64 | pp38-manylinux_x86_64<br/>pp38-manylinux_i686 | pp38-manylinux_aarch64 |
| PyPy3.9 v7.3 | pp39-macosx_x86_64<br/>pp39-macosx_arm64 | pp39-win_amd64 | pp39-manylinux_x86_64<br/>pp39-manylinux_i686 | pp39-manylinux_aarch64 | | PyPy3.9 v7.3 | pp39-macosx_x86_64<br/>pp39-macosx_arm64 | pp39-win_amd64 | pp39-manylinux_x86_64<br/>pp39-manylinux_i686 | pp39-manylinux_aarch64 |
| PyPy3.10 v7.3 | pp310-macosx_x86_64<br/>pp310-macosx_arm64 | pp310-win_amd64 | pp310-manylinux_x86_64<br/>pp310-manylinux_i686 | pp310-manylinux_aarch64 | | PyPy3.10 v7.3 | pp310-macosx_x86_64<br/>pp310-macosx_arm64 | pp310-win_amd64 | pp310-manylinux_x86_64<br/>pp310-manylinux_i686 | pp310-manylinux_aarch64 |
| PyPy3.11 v7.3 | pp311-macosx_x86_64<br/>pp311-macosx_arm64 | pp311-win_amd64 | pp311-manylinux_x86_64<br/>pp311-manylinux_i686 | pp311-manylinux_aarch64 |
The list of supported and currently selected build identifiers can also be retrieved by passing the `--print-build-identifiers` flag to cibuildwheel. The list of supported and currently selected build identifiers can also be retrieved by passing the `--print-build-identifiers` flag to cibuildwheel.
The format is `python_tag-platform_tag`, with tags similar to those in [PEP 425](https://www.python.org/dev/peps/pep-0425/#details). The format is `python_tag-platform_tag`, with tags similar to those in [PEP 425](https://www.python.org/dev/peps/pep-0425/#details).
@@ -1188,23 +1189,23 @@ Platform-specific environment variables are also available:<br/>
The available options are: The available options are:
| Option | Default | Future default* | | Option | Default | Future default* |
|-----------------------------------|----------------------------------------------------------------------------------------------|-----------------------------------------------------------------| |-----------------------------------|----------------------------------------------------------------|-----------------------------------------------------------------|
| CIBW_MANYLINUX_X86_64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_x86_64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_x86_64) | | CIBW_MANYLINUX_X86_64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_x86_64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_x86_64) |
| CIBW_MANYLINUX_I686_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_i686) | | | CIBW_MANYLINUX_I686_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_i686) | |
| CIBW_MANYLINUX_PYPY_X86_64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_x86_64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_x86_64) | | CIBW_MANYLINUX_PYPY_X86_64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_x86_64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_x86_64) |
| CIBW_MANYLINUX_AARCH64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_aarch64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_aarch64) | | CIBW_MANYLINUX_AARCH64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_aarch64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_aarch64) |
| CIBW_MANYLINUX_PPC64LE_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_ppc64le) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_ppc64le) | | CIBW_MANYLINUX_PPC64LE_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_ppc64le) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_ppc64le) |
| CIBW_MANYLINUX_S390X_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_s390x) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_s390x) | | CIBW_MANYLINUX_S390X_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_s390x) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_s390x) |
| CIBW_MANYLINUX_ARMV7L_IMAGE | [`manylinux_2_31`](https://github.com/mayeut/manylinux-ubuntu/pkgs/container/manylinux_2_31) | | | CIBW_MANYLINUX_ARMV7L_IMAGE | [`manylinux_2_31`](https://quay.io/pypa/manylinux_2_31_armv7l) | |
| CIBW_MANYLINUX_PYPY_AARCH64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_aarch64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_aarch64) | | CIBW_MANYLINUX_PYPY_AARCH64_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_aarch64) | [`manylinux_2_28`](https://quay.io/pypa/manylinux_2_28_aarch64) |
| CIBW_MANYLINUX_PYPY_I686_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_i686) | | | CIBW_MANYLINUX_PYPY_I686_IMAGE | [`manylinux2014`](https://quay.io/pypa/manylinux2014_i686) | |
| CIBW_MUSLLINUX_X86_64_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_x86_64) | | | CIBW_MUSLLINUX_X86_64_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_x86_64) | |
| CIBW_MUSLLINUX_I686_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_i686) | | | CIBW_MUSLLINUX_I686_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_i686) | |
| CIBW_MUSLLINUX_AARCH64_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_aarch64) | | | CIBW_MUSLLINUX_AARCH64_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_aarch64) | |
| CIBW_MUSLLINUX_PPC64LE_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_ppc64le) | | | CIBW_MUSLLINUX_PPC64LE_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_ppc64le) | |
| CIBW_MUSLLINUX_S390X_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_s390x) | | | CIBW_MUSLLINUX_S390X_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_s390x) | |
| CIBW_MUSLLINUX_ARMV7L_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_armv7l) | | | CIBW_MUSLLINUX_ARMV7L_IMAGE | [`musllinux_1_2`](https://quay.io/pypa/musllinux_1_2_armv7l) | |
<small>* The default is scheduled to change in a cibuildwheel release on or after 6th May 2025 - if you don't want the new default, you should set the value to `manylinux2014`.</small> <small>* The default is scheduled to change in a cibuildwheel release on or after 6th May 2025 - if you don't want the new default, you should set the value to `manylinux2014`.</small>
+2 -2
View File
@@ -161,7 +161,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Build wheels - name: Build wheels
run: pipx run cibuildwheel==2.22.0 run: pipx run cibuildwheel==2.23.2
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v4
with: with:
@@ -198,7 +198,7 @@ To build Linux, Mac, and Windows wheels using GitHub Actions, create a `.github/
- uses: actions/setup-python@v5 - uses: actions/setup-python@v5
- name: Install cibuildwheel - name: Install cibuildwheel
run: python -m pip install cibuildwheel==2.22.0 run: python -m pip install cibuildwheel==2.23.2
- name: Build wheels - name: Build wheels
run: python -m cibuildwheel --output-dir wheelhouse run: python -m cibuildwheel --output-dir wheelhouse
+1 -1
View File
@@ -9,7 +9,7 @@ environment:
stack: python 3.12 stack: python 3.12
install: python -m pip install cibuildwheel==2.22.0 install: python -m pip install cibuildwheel==2.23.2
build_script: python -m cibuildwheel --output-dir wheelhouse build_script: python -m cibuildwheel --output-dir wheelhouse
+4 -4
View File
@@ -6,7 +6,7 @@ jobs:
- bash: | - bash: |
set -o errexit set -o errexit
python3 -m pip install --upgrade pip python3 -m pip install --upgrade pip
pip3 install cibuildwheel==2.22.0 pip3 install cibuildwheel==2.23.2
displayName: Install dependencies displayName: Install dependencies
- bash: cibuildwheel --output-dir wheelhouse . - bash: cibuildwheel --output-dir wheelhouse .
displayName: Build wheels displayName: Build wheels
@@ -14,13 +14,13 @@ jobs:
inputs: {pathtoPublish: 'wheelhouse'} inputs: {pathtoPublish: 'wheelhouse'}
- job: macos - job: macos
pool: {vmImage: 'macOS-12'} pool: {vmImage: 'macOS-13'}
steps: steps:
- task: UsePythonVersion@0 - task: UsePythonVersion@0
- bash: | - bash: |
set -o errexit set -o errexit
python3 -m pip install --upgrade pip python3 -m pip install --upgrade pip
python3 -m pip install cibuildwheel==2.22.0 python3 -m pip install cibuildwheel==2.23.2
displayName: Install dependencies displayName: Install dependencies
- bash: cibuildwheel --output-dir wheelhouse . - bash: cibuildwheel --output-dir wheelhouse .
displayName: Build wheels displayName: Build wheels
@@ -34,7 +34,7 @@ jobs:
- bash: | - bash: |
set -o errexit set -o errexit
python -m pip install --upgrade pip python -m pip install --upgrade pip
pip install cibuildwheel==2.22.0 pip install cibuildwheel==2.23.2
displayName: Install dependencies displayName: Install dependencies
- bash: cibuildwheel --output-dir wheelhouse . - bash: cibuildwheel --output-dir wheelhouse .
displayName: Build wheels displayName: Build wheels
+3 -3
View File
@@ -11,7 +11,7 @@ jobs:
- run: - run:
name: Build the Linux wheels. name: Build the Linux wheels.
command: | command: |
python3 -m pip install --user cibuildwheel==2.22.0 python3 -m pip install --user cibuildwheel==2.23.2
cibuildwheel --output-dir wheelhouse cibuildwheel --output-dir wheelhouse
- store_artifacts: - store_artifacts:
path: wheelhouse/ path: wheelhouse/
@@ -28,7 +28,7 @@ jobs:
- run: - run:
name: Build the Linux aarch64 wheels. name: Build the Linux aarch64 wheels.
command: | command: |
python3 -m pip install --user cibuildwheel==2.22.0 python3 -m pip install --user cibuildwheel==2.23.2
python3 -m cibuildwheel --output-dir wheelhouse python3 -m cibuildwheel --output-dir wheelhouse
- store_artifacts: - store_artifacts:
path: wheelhouse/ path: wheelhouse/
@@ -44,7 +44,7 @@ jobs:
name: Build the OS X wheels. name: Build the OS X wheels.
command: | command: |
sudo softwareupdate --install-rosetta --agree-to-license # for python<=3.8 or x86_64/universal2 tests sudo softwareupdate --install-rosetta --agree-to-license # for python<=3.8 or x86_64/universal2 tests
pip3 install cibuildwheel==2.22.0 pip3 install cibuildwheel==2.23.2
cibuildwheel --output-dir wheelhouse cibuildwheel --output-dir wheelhouse
- store_artifacts: - store_artifacts:
path: wheelhouse/ path: wheelhouse/
+1 -1
View File
@@ -1,6 +1,6 @@
build_and_store_wheels: &BUILD_AND_STORE_WHEELS build_and_store_wheels: &BUILD_AND_STORE_WHEELS
install_cibuildwheel_script: install_cibuildwheel_script:
- python -m pip install cibuildwheel==2.22.0 - python -m pip install cibuildwheel==2.23.2
run_cibuildwheel_script: run_cibuildwheel_script:
- cibuildwheel - cibuildwheel
wheels_artifacts: wheels_artifacts:
+1 -1
View File
@@ -1,6 +1,6 @@
build_and_store_wheels: &BUILD_AND_STORE_WHEELS build_and_store_wheels: &BUILD_AND_STORE_WHEELS
install_cibuildwheel_script: install_cibuildwheel_script:
- python -m pip install cibuildwheel==2.22.0 - python -m pip install cibuildwheel==2.23.2
run_cibuildwheel_script: run_cibuildwheel_script:
- cibuildwheel - cibuildwheel
wheels_artifacts: wheels_artifacts:
+2 -2
View File
@@ -17,13 +17,13 @@ jobs:
strategy: strategy:
matrix: matrix:
# macos-13 is an intel runner, macos-14 is apple silicon # macos-13 is an intel runner, macos-14 is apple silicon
os: [ubuntu-latest, windows-latest, macos-13, macos-14] os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-13, macos-14]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Build wheels - name: Build wheels
uses: pypa/cibuildwheel@v2.22.0 uses: pypa/cibuildwheel@v2.23.2
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v4
with: with:
+2 -2
View File
@@ -9,13 +9,13 @@ jobs:
strategy: strategy:
matrix: matrix:
# macos-13 is an intel runner, macos-14 is apple silicon # macos-13 is an intel runner, macos-14 is apple silicon
os: [ubuntu-latest, windows-latest, macos-13, macos-14] os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-13, macos-14]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Build wheels - name: Build wheels
uses: pypa/cibuildwheel@v2.22.0 uses: pypa/cibuildwheel@v2.23.2
# env: # env:
# CIBW_SOME_OPTION: value # CIBW_SOME_OPTION: value
# ... # ...
+10 -6
View File
@@ -9,23 +9,27 @@ jobs:
strategy: strategy:
matrix: matrix:
# macos-13 is an intel runner, macos-14 is apple silicon # macos-13 is an intel runner, macos-14 is apple silicon
os: [ubuntu-latest, windows-latest, macos-13, macos-14] os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-13, macos-14]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Set up QEMU - name: Set up QEMU
if: runner.os == 'Linux' if: runner.os == 'Linux' && runner.arch == 'X64'
uses: docker/setup-qemu-action@v3 uses: docker/setup-qemu-action@v3
with: with:
platforms: all platforms: all
- name: Build wheels - name: Build wheels
uses: pypa/cibuildwheel@v2.22.0 uses: pypa/cibuildwheel@v2.23.2
env: env:
# configure cibuildwheel to build native archs ('auto'), and some # configure cibuildwheel on Linux to build native archs ('auto'),
# emulated ones # and to split the remaining architectures between the x86_64 and
CIBW_ARCHS_LINUX: auto aarch64 ppc64le s390x # ARM runners
# armv7l can be built without QEMU on GitHub Actions ARM runners but that's
# not the case on all ARM64 hardware hence 'auto armv7l' for native archs
# on the GHA ARM64 runner
CIBW_ARCHS_LINUX: ${{ runner.arch == 'X64' && 'auto ppc64le s390x' || 'auto armv7l' }}
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v4
with: with:
+3 -3
View File
@@ -12,7 +12,7 @@ linux:
DOCKER_TLS_CERTDIR: "" DOCKER_TLS_CERTDIR: ""
script: script:
- curl -sSL https://get.docker.com/ | sh - curl -sSL https://get.docker.com/ | sh
- python -m pip install cibuildwheel==2.22.0 - python -m pip install cibuildwheel==2.23.2
- cibuildwheel --output-dir wheelhouse - cibuildwheel --output-dir wheelhouse
artifacts: artifacts:
paths: paths:
@@ -23,7 +23,7 @@ windows:
before_script: before_script:
- choco install python -y --version 3.12.4 - choco install python -y --version 3.12.4
- choco install git.install -y - choco install git.install -y
- py -m pip install cibuildwheel==2.22.0 - py -m pip install cibuildwheel==2.23.2
script: script:
- py -m cibuildwheel --output-dir wheelhouse --platform windows - py -m cibuildwheel --output-dir wheelhouse --platform windows
artifacts: artifacts:
@@ -35,7 +35,7 @@ windows:
macos: macos:
image: macos-14-xcode-15 image: macos-14-xcode-15
before_script: before_script:
- python3 -m pip install cibuildwheel==2.22.0 - python3 -m pip install cibuildwheel==2.23.2
script: script:
- python3 -m cibuildwheel --output-dir wheelhouse - python3 -m cibuildwheel --output-dir wheelhouse
artifacts: artifacts:
+1 -1
View File
@@ -14,7 +14,7 @@ linux:
- curl -sSL https://get.docker.com/ | sh - curl -sSL https://get.docker.com/ | sh
# Warning: This is extremely slow, be careful with how many wheels you build # Warning: This is extremely slow, be careful with how many wheels you build
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
- python -m pip install cibuildwheel==2.22.0 - python -m pip install cibuildwheel==2.23.2
# Assuming your CI runner's default architecture is x86_64... # Assuming your CI runner's default architecture is x86_64...
- cibuildwheel --output-dir wheelhouse --platform linux --archs aarch64 - cibuildwheel --output-dir wheelhouse --platform linux --archs aarch64
artifacts: artifacts:
+1 -1
View File
@@ -20,7 +20,7 @@ jobs:
- ln -s /c/Python312/python.exe /c/Python312/python3.exe - ln -s /c/Python312/python.exe /c/Python312/python3.exe
install: install:
- python3 -m pip install cibuildwheel==2.22.0 - python3 -m pip install cibuildwheel==2.23.2
script: script:
# build the wheels, put them into './dist' # build the wheels, put them into './dist'
+1 -1
View File
@@ -26,7 +26,7 @@ jobs:
- ln -s /c/Python312/python.exe /c/Python312/python3.exe - ln -s /c/Python312/python.exe /c/Python312/python3.exe
install: install:
- python3 -m pip install cibuildwheel==2.22.0 - python3 -m pip install cibuildwheel==2.23.2
script: script:
# build the wheels, put them into './wheelhouse' # build the wheels, put them into './wheelhouse'
+2 -2
View File
@@ -52,7 +52,7 @@ jobs:
- stage: deploy - stage: deploy
name: Build and deploy Linux wheels name: Build and deploy Linux wheels
services: docker services: docker
install: python3 -m pip install cibuildwheel==2.22.0 twine install: python3 -m pip install cibuildwheel==2.23.2 twine
script: python3 -m cibuildwheel --output-dir wheelhouse script: python3 -m cibuildwheel --output-dir wheelhouse
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
# Deploy on windows # Deploy on windows
@@ -60,7 +60,7 @@ jobs:
name: Build and deploy Windows wheels name: Build and deploy Windows wheels
os: windows os: windows
language: shell language: shell
install: python3 -m pip install cibuildwheel==2.22.0 twine install: python3 -m pip install cibuildwheel==2.23.2 twine
script: python3 -m cibuildwheel --output-dir wheelhouse script: python3 -m cibuildwheel --output-dir wheelhouse
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
[project] [project]
name = "cibuildwheel" name = "cibuildwheel"
version = "2.22.0" version = "2.23.2"
description = "Build Python wheels on CI with minimal configuration." description = "Build Python wheels on CI with minimal configuration."
readme = "README.md" readme = "README.md"
license = "BSD-2-Clause" license = "BSD-2-Clause"
+2
View File
@@ -210,6 +210,7 @@ def expected_wheels(
"pp38-pypy38_pp73", "pp38-pypy38_pp73",
"pp39-pypy39_pp73", "pp39-pypy39_pp73",
"pp310-pypy310_pp73", "pp310-pypy310_pp73",
"pp311-pypy311_pp73",
] ]
if platform == "macos" and machine_arch == "arm64": if platform == "macos" and machine_arch == "arm64":
@@ -225,6 +226,7 @@ def expected_wheels(
"pp38-pypy38_pp73", "pp38-pypy38_pp73",
"pp39-pypy39_pp73", "pp39-pypy39_pp73",
"pp310-pypy310_pp73", "pp310-pypy310_pp73",
"pp311-pypy311_pp73",
] ]
if single_python: if single_python:
+23 -16
View File
@@ -8,6 +8,7 @@ import shutil
import subprocess import subprocess
import sys import sys
import textwrap import textwrap
import time
from contextlib import nullcontext from contextlib import nullcontext
from pathlib import Path, PurePath, PurePosixPath from pathlib import Path, PurePath, PurePosixPath
@@ -138,14 +139,28 @@ def test_cwd(container_engine):
assert container.call(["pwd"], capture_output=True, cwd="/opt") == "/opt\n" assert container.call(["pwd"], capture_output=True, cwd="/opt") == "/opt\n"
@pytest.mark.skipif(
pm == "s390x" and detect_ci_provider() == CIProvider.travis_ci,
reason="test is flaky on this platform, see https://github.com/pypa/cibuildwheel/pull/1961#issuecomment-2334678966",
)
def test_container_removed(container_engine): def test_container_removed(container_engine):
# test is flaky on some platforms, implement retry for 5 second
timeout = 50 # * 100 ms = 5s
with OCIContainer( with OCIContainer(
engine=container_engine, image=DEFAULT_IMAGE, oci_platform=DEFAULT_OCI_PLATFORM engine=container_engine, image=DEFAULT_IMAGE, oci_platform=DEFAULT_OCI_PLATFORM
) as container: ) as container:
assert container.name is not None
container_name = container.name
for _ in range(timeout):
docker_containers_listing = subprocess.run(
f"{container.engine.name} container ls",
shell=True,
check=True,
stdout=subprocess.PIPE,
text=True,
).stdout
if container_name in docker_containers_listing:
break
time.sleep(0.1)
assert container_name in docker_containers_listing
for _ in range(timeout):
docker_containers_listing = subprocess.run( docker_containers_listing = subprocess.run(
f"{container.engine.name} container ls", f"{container.engine.name} container ls",
shell=True, shell=True,
@@ -153,18 +168,10 @@ def test_container_removed(container_engine):
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
text=True, text=True,
).stdout ).stdout
assert container.name is not None if container_name not in docker_containers_listing:
assert container.name in docker_containers_listing break
old_container_name = container.name time.sleep(0.1)
assert container_name not in docker_containers_listing
docker_containers_listing = subprocess.run(
f"{container.engine.name} container ls",
shell=True,
check=True,
stdout=subprocess.PIPE,
text=True,
).stdout
assert old_container_name not in docker_containers_listing
def test_large_environment(container_engine): def test_large_environment(container_engine):
+3 -2
View File
@@ -27,6 +27,7 @@ ALL_IDS = {
"pp38", "pp38",
"pp39", "pp39",
"pp310", "pp310",
"pp311",
} }
@@ -158,7 +159,7 @@ before-all = "true"
assert identifiers == { assert identifiers == {
f"{x}-manylinux_x86_64" f"{x}-manylinux_x86_64"
for x in ALL_IDS for x in ALL_IDS
- {"cp36", "cp310", "cp311", "cp312", "cp313", "pp37", "pp38", "pp39", "pp310"} - {"cp36", "cp310", "cp311", "cp312", "cp313", "pp37", "pp38", "pp39", "pp310", "pp311"}
} }
assert kwargs["options"].build_options("cp37-manylinux_x86_64").before_all == "" assert kwargs["options"].build_options("cp37-manylinux_x86_64").before_all == ""
@@ -169,7 +170,7 @@ before-all = "true"
identifiers = {x.identifier for x in kwargs["platform_configs"]} identifiers = {x.identifier for x in kwargs["platform_configs"]}
assert identifiers == { assert identifiers == {
f"{x}-manylinux_x86_64" f"{x}-manylinux_x86_64"
for x in ["cp310", "cp311", "cp312", "cp313", "pp37", "pp38", "pp39", "pp310"] for x in ["cp310", "cp311", "cp312", "cp313", "pp37", "pp38", "pp39", "pp310", "pp311"]
} }
kwargs = build_in_container.call_args_list[3][1] kwargs = build_in_container.call_args_list[3][1]
+33
View File
@@ -459,3 +459,36 @@ def test_free_threaded_support(
assert EnableGroups.CPythonFreeThreading in options.globals.build_selector.enable assert EnableGroups.CPythonFreeThreading in options.globals.build_selector.enable
else: else:
assert EnableGroups.CPythonFreeThreading not in options.globals.build_selector.enable assert EnableGroups.CPythonFreeThreading not in options.globals.build_selector.enable
@pytest.mark.parametrize(
("image", "deprecated"),
[
("manylinux1", True),
("manylinux2010", True),
("manylinux2014", False),
("manylinux_2_24", True),
("manylinux_2_28", False),
("manylinux_2_34", False),
("musllinux_1_1", True),
("musllinux_1_2", False),
],
)
def test_deprecated_image(image: str, deprecated: bool, capsys: pytest.CaptureFixture[str]) -> None:
args = CommandLineArguments.defaults()
env = {
"CIBW_ARCHS": "x86_64",
"CIBW_MANYLINUX_X86_64_IMAGE": image if image.startswith("manylinux") else "",
"CIBW_MUSLLINUX_X86_64_IMAGE": image if image.startswith("musllinux") else "",
}
options = Options(platform="linux", command_line_arguments=args, env=env)
bo = options.build_options(None)
images = bo.manylinux_images if image.startswith("manylinux") else bo.musllinux_images
assert images is not None
resolved_image = images["x86_64"]
captured = capsys.readouterr()
if deprecated:
assert f"Deprecated image {image!r}" in captured.err
assert f"{resolved_image!r}" in captured.err
else:
assert "Deprecated image" not in captured.err