Compare commits

...
25 Commits
Author SHA1 Message Date
Henry Schreiner 352e01339f Bump version: v3.1.3 2025-08-01 12:38:46 -04:00
Henry Schreiner c463e56ba2 tests: another iOS flaky spot (#2539)
* tests: another iOS flaky spot

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

* tests: missing interceptions

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

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2025-08-01 12:32:01 -04:00
Vytautas Liuolia 8c5c738023 docs(project): add Falcon to working examples (#2538) 2025-07-31 12:26:27 -04:00
Henry Schreiner feeb3992a7 tests: add flaky test handling (#2527)
* chore: add flaky test handling

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

* Update test_android.py

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2025-07-31 12:26:17 -04:00
Henry Schreiner 60b9cc95db fix: never call pip directly (#2537)
You can't change the running process in Windows. In pip 25.2, the format of the generated file changes, so this now breaks if you try to update to the latest pip (which can happen if deps are unpinned).
2025-07-31 12:26:07 -04:00
Tim Felgentreff e2c7102ed7 chore: remove some GraalPy Windows workarounds. (#2501)
GraalPy made a release where pytest works on Windows
2025-07-31 00:31:23 -04:00
Henry Schreiner 9e4e50bd76 Bump version: v3.1.2 2025-07-29 09:12:51 -06:00
pre-commit-ci[bot]andpre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> 8ef9414f60 [pre-commit.ci] pre-commit autoupdate (#2532)
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.12.4 → v0.12.5](https://github.com/astral-sh/ruff-pre-commit/compare/v0.12.4...v0.12.5)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-07-28 16:06:41 -06:00
Joe Rickerby 1953c04972 Adding @mhsmith as platform maintainer for Android (#2516) 2025-07-28 13:00:54 -06:00
Russell Keith-Magee 46a6d27995 Bump iOS support package versions. (#2530) 2025-07-28 12:26:52 -06:00
cibuildwheel-bot[bot]andcibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> 0dc0b48e4d [Bot] Update dependencies (#2529)
Update dependencies

Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com>
2025-07-28 08:20:49 -06:00
Matthieu Darbois b887417e0e fix: enable all shall not enable cpython-experimental-riscv64 (#2528) 2025-07-27 23:18:35 -06:00
Matthieu Darbois 36c5079ce5 tests: reduce testing time on iOS (#2523)
A number of tests only require to run with a single version of python.
This will reduce the time needed to run those tests.
2025-07-27 23:15:55 -06:00
Matthieu Darbois 68c03665d3 feat: add deprecation warning for cpython-experimental-riscv64 enable (#2526) 2025-07-27 15:58:03 -04:00
Matthieu Darbois 1c38fac9c8 fix: invalid warning on test-skip = ["*-macosx_universal2:arm64"] (#2522) 2025-07-27 09:13:38 -04:00
Henry SchreinerandMatthieu Darbois 140bc1a96a tests: mark and add skips (#2524)
* tests: mark and add skips

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

* fix comment

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Matthieu Darbois <mayeut@users.noreply.github.com>
2025-07-27 12:12:42 +02:00
Henry Schreiner 55fcb25edc fix: error on CIBW_FREE_THREADED_SUPPORT set (#2520)
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2025-07-26 19:09:26 +02:00
Clément Robertandmayeut c89609aaf2 BUG: fix incorrect number of wheels in logs (#2517)
* BUG: fix incorrect number of wheels in logs

* add a test

---------

Co-authored-by: mayeut <mayeut@users.noreply.github.com>
2025-07-26 13:13:01 +02:00
tabedzkiHenry SchreinerJoe Rickerbypre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
13b086e3c6 docs: clarify language around Python requirements for local cibuildwheel usage (#2513)
* First set of changes to setup.md

* Update docs/setup.md

Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>

* Update docs/setup.md

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

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
Co-authored-by: Joe Rickerby <joerick@mac.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-07-25 00:46:16 -04:00
Malcolm Smith 302af02853 fix(android): execute wheel via sys.executable (#2515)
* Android: execute `wheel` via `sys.executable`

* Suppress unhelpful cyclic-import warning
2025-07-24 16:38:22 -04:00
Matthieu Darbois 9361af3204 feat: riscv64 builds are now enabled by default (#2509)
PyPI now accepts `riscv64` uploads for manylinux/musllinux.
Those builds do not require an opt-in anymore.
2025-07-24 14:52:07 -04:00
Malcolm Smith 47c5a35421 Add Cirrus macOS as a runner that supports building for Android but not testing (#2514)
* Add Cirrus macOS as a runner that supports building for Android but not testing

* Try to trigger Cirrus by changing .cirrus.yml
2025-07-24 14:51:39 -04:00
Joe Rickerby e6de07ed39 Bump version: v3.1.1 2025-07-24 19:14:08 +01:00
timrid 2ca692b1e5 docs: iOS typo fix in docs (#2510)
Update platforms.md

Fixed typo
2025-07-24 12:29:16 -04:00
Clément Robert 1ac7fa7f00 fix: report defects in logs and HTML summaries (#2512)
* BUG: fix incorrect reporting of number of wheels produced

* BUG: fix incorrect naming of test only sessions in html summaries
2025-07-24 12:28:30 -04:00
47 changed files with 595 additions and 431 deletions
+2 -2
View File
@@ -46,8 +46,8 @@ linux_aarch64_task:
<<: *RUN_TESTS <<: *RUN_TESTS
windows_x86_task: windows_x86_task:
# The task takes ~55 minutes while the timeout happens # The task takes ~55 minutes while the timeout happens after 60 minutes by default,
# after 60 minutes by default, let's allow some wiggle room. # let's allow some wiggle room.
timeout_in: 120m timeout_in: 120m
windows_container: windows_container:
image: cirrusci/windowsservercore:visualstudio2022 image: cirrusci/windowsservercore:visualstudio2022
+1
View File
@@ -1,2 +1,3 @@
cibuildwheel/platforms/ios.py @freakboy3742 cibuildwheel/platforms/ios.py @freakboy3742
cibuildwheel/platforms/pyodide.py @hoodmane @ryanking13 @agriyakhetarpal cibuildwheel/platforms/pyodide.py @hoodmane @ryanking13 @agriyakhetarpal
cibuildwheel/platforms/android.py @mhsmith
+5 -3
View File
@@ -51,6 +51,7 @@ jobs:
needs: lint needs: lint
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
fail-fast: false
matrix: matrix:
os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, windows-11-arm, macos-13, macos-15] os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, windows-11-arm, macos-13, macos-15]
python_version: ['3.13'] python_version: ['3.13']
@@ -97,6 +98,7 @@ jobs:
uv sync --no-dev --group test uv sync --no-dev --group test
- uses: joerick/pr-labels-action@v1.0.9 - uses: joerick/pr-labels-action@v1.0.9
- name: Set CIBW_ENABLE - name: Set CIBW_ENABLE
shell: bash shell: bash
run: | run: |
@@ -134,16 +136,16 @@ jobs:
with: with:
package-dir: sample_proj package-dir: sample_proj
output-dir: wheelhouse_only output-dir: wheelhouse_only
only: cp312-${{ runner.os == 'Linux' && (runner.arch == 'ARM64' && 'manylinux_aarch64' || 'manylinux_x86_64') || (runner.os == 'Windows' && 'win_amd64' || 'macosx_x86_64') }} only: cp313-${{ 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
run: | run: |
cat > sample_proj/cibw.toml <<EOF cat > sample_proj/cibw.toml <<EOF
[tool.cibuildwheel] [tool.cibuildwheel]
# Only build on CPython 3.12 on native arch # Only build on CPython 3.13 on native arch
archs = ["native"] archs = ["native"]
build = "cp312-*" build = "cp313-*"
# Skip musllinux # Skip musllinux
skip = "*-musllinux*" skip = "*-musllinux*"
EOF EOF
+1 -1
View File
@@ -14,7 +14,7 @@ repos:
- id: trailing-whitespace - id: trailing-whitespace
- repo: https://github.com/astral-sh/ruff-pre-commit - repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.12.4 rev: v0.12.5
hooks: hooks:
- id: ruff - id: ruff
args: ["--fix", "--show-fixes"] args: ["--fix", "--show-fixes"]
+34 -53
View File
@@ -97,7 +97,7 @@ jobs:
- uses: actions/setup-python@v5 - uses: actions/setup-python@v5
- name: Install cibuildwheel - name: Install cibuildwheel
run: python -m pip install cibuildwheel==3.1.0 run: python -m pip install cibuildwheel==3.1.3
- name: Build wheels - name: Build wheels
run: python -m cibuildwheel --output-dir wheelhouse run: python -m cibuildwheel --output-dir wheelhouse
@@ -227,6 +227,37 @@ Changelog
<!-- [[[cog from readme_changelog import mini_changelog; print(mini_changelog()) ]]] --> <!-- [[[cog from readme_changelog import mini_changelog; print(mini_changelog()) ]]] -->
### v3.1.3
_1 August 2025_
- 🐛 Fix bug where "latest" dependencies couldn't update to pip 25.2 on Windows (#2537)
- 🛠 Use pytest-rerunfailures to improve some of our iOS/Android tests (#2527, #2539)
- 🛠 Remove some GraalPy Windows workarounds in our tests (#2501)
### v3.1.2
_29 July 2025_
- ⚠️ Add an error if `CIBW_FREE_THREADING_SUPPORT` is set; you are likely missing 3.13t wheels, please use the `enable`/`CIBW_ENABLE` (#2520)
- 🛠 `riscv64` now enabled if you target that architecture, it's now supported on PyPI (#2509)
- 🛠 Add warning when using `cpython-experimental-riscv64` (no longer needed) (#2526, #2528)
- 🛠 iOS versions bumped, fixing issues with 3.14 (now RC 1) (#2530)
- 🐛 Fix bug in Android running wheel from our GitHub Action (#2517)
- 🐛 Fix warning when using `test-skip` of `"*-macosx_universal2:arm64"` (#2522)
- 🐛 Fix incorrect number of wheels reported in logs, again (#2517)
- 📚 We welcome our Android platform maintainer (#2516)
### v3.1.1
_24 July 2025_
- 🐛 Fix a bug showing an incorrect wheel count at the end of execution, and misrepresenting test-only runs in the GitHub Action summary (#2512)
- 📚 Docs fix (#2510)
### v3.1.0 ### v3.1.0
_23 July 2025_ _23 July 2025_
@@ -253,58 +284,7 @@ _5 July 2025_
- 🛠 Updates CPython 3.14 prerelease to 3.14.0b3 (#2471) - 🛠 Updates CPython 3.14 prerelease to 3.14.0b3 (#2471)
- ✨ Adds a CPython 3.14 prerelease iOS build (only when prerelease builds are [enabled](https://cibuildwheel.pypa.io/en/stable/options/#enable)) (#2475) - ✨ Adds a CPython 3.14 prerelease iOS build (only when prerelease builds are [enabled](https://cibuildwheel.pypa.io/en/stable/options/#enable)) (#2475)
### v3.0.0 <!-- [[[end]]] (sum: Fe+mD8YR4+) -->
_11 June 2025_
See @henryiii's [release post](https://iscinumpy.dev/post/cibuildwheel-3-0-0/) for more info on new features!
- 🌟 Adds the ability to [build wheels for iOS](https://cibuildwheel.pypa.io/en/stable/platforms/#ios)! Set the [`platform` option](https://cibuildwheel.pypa.io/en/stable/options/#platform) to `ios` on a Mac with the iOS toolchain to try it out! (#2286, #2363, #2432)
- 🌟 Adds support for the GraalPy interpreter! Enable for your project using the [`enable` option](https://cibuildwheel.pypa.io/en/stable/options/#enable). (#1538, #2411, #2414)
- ✨ Adds CPython 3.14 support, under the [`enable` option](https://cibuildwheel.pypa.io/en/stable/options/#enable) `cpython-prerelease`. This version of cibuildwheel uses 3.14.0b2. (#2390)
_While CPython is in beta, the ABI can change, so your wheels might not be compatible with the final release. For this reason, we don't recommend distributing wheels until RC1, at which point 3.14 will be available in cibuildwheel without the flag._ (#2390)
- ✨ Adds the [test-sources option](https://cibuildwheel.pypa.io/en/stable/options/#test-sources), which copies files and folders into the temporary working directory we run tests from. (#2062, #2284, #2420, #2437)
This is particularly important for iOS builds, which do not support placeholders in the `test-command`, but can also be useful for other platforms.
- ✨ Adds [`dependency-versions`](https://cibuildwheel.pypa.io/en/stable/options/#dependency-versions) inline syntax (#2122)
- ✨ Improves support for Pyodide builds and adds the experimental [`pyodide-version`](https://cibuildwheel.pypa.io/en/stable/options/#pyodide-version) option, which allows you to specify the version of Pyodide to use for builds. (#2002)
- ✨ Add `pyodide-prerelease` [enable](https://cibuildwheel.pypa.io/en/stable/options/#enable) option, with an early build of 0.28 (Python 3.13). (#2431)
- ✨ Adds the [`test-environment`](https://cibuildwheel.pypa.io/en/stable/options/#test-environment) option, which allows you to set environment variables for the test command. (#2388)
- ✨ Adds the [`xbuild-tools`](https://cibuildwheel.pypa.io/en/stable/options/#xbuild-tools) option, which allows you to specify tools safe for cross-compilation. Currently only used on iOS; will be useful for Android in the future. (#2317)
- 🛠 The default [manylinux image](https://cibuildwheel.pypa.io/en/stable/options/#linux-image) has changed from `manylinux2014` to `manylinux_2_28`. (#2330)
- 🛠 EOL images `manylinux1`, `manylinux2010`, `manylinux_2_24` and `musllinux_1_1` can no longer be specified by their shortname. The full OCI name can still be used for these images, if you wish. (#2316)
- 🛠 Invokes `build` rather than `pip wheel` to build wheels by default. You can control this via the [`build-frontend`](https://cibuildwheel.pypa.io/en/stable/options/#build-frontend) option. You might notice that you can see your build log output now! (#2321)
- 🛠 Build verbosity settings have been reworked to have consistent meanings between build backends when non-zero. (#2339)
- 🛠 Removed the `CIBW_PRERELEASE_PYTHONS` and `CIBW_FREE_THREADED_SUPPORT` options - these have been folded into the [`enable`](https://cibuildwheel.pypa.io/en/stable/options/#enable) option instead. (#2095)
- 🛠 Build environments no longer have setuptools and wheel preinstalled. (#2329)
- 🛠 Use the standard Schema line for the integrated JSONSchema. (#2433)
- ⚠️ Dropped support for building Python 3.6 and 3.7 wheels. If you need to build wheels for these versions, use cibuildwheel v2.23.3 or earlier. (#2282)
- ⚠️ The minimum Python version required to run cibuildwheel is now Python 3.11. You can still build wheels for Python 3.8 and newer. (#1912)
- ⚠️ 32-bit Linux wheels no longer built by default - the [arch](https://cibuildwheel.pypa.io/en/stable/options/#archs) was removed from `"auto"`. It now requires explicit `"auto32"`. Note that modern manylinux images (like the new default, `manylinux_2_28`) do not have 32-bit versions. (#2458)
- ⚠️ PyPy wheels no longer built by default, due to a change to our options system. To continue building PyPy wheels, you'll now need to set the [`enable` option](https://cibuildwheel.pypa.io/en/stable/options/#enable) to `pypy` or `pypy-eol`. (#2095)
- ⚠️ Dropped official support for Appveyor. If it was working for you before, it will probably continue to do so, but we can't be sure, because our CI doesn't run there anymore. (#2386)
- 📚 A reorganisation of the docs, and numerous updates. (#2280)
- 📚 Use Python 3.14 color output in docs CLI output. (#2407)
- 📚 Docs now primarily use the pyproject.toml name of options, rather than the environment variable name. (#2389)
- 📚 README table now matches docs and auto-updates. (#2427, #2428)
### v2.23.3
_26 April 2025_
- 🛠 Dependency updates, including Python 3.13.3 (#2371)
### 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)
<!-- [[[end]]] (sum: HkLT9ZhhtV) -->
--- ---
@@ -339,6 +319,7 @@ Platform maintainers:
- Hood Chatham [@hoodmane](https://github.com/hoodmane) (Pyodide) - Hood Chatham [@hoodmane](https://github.com/hoodmane) (Pyodide)
- Gyeongjae Choi [@ryanking13](https://github.com/ryanking13) (Pyodide) - Gyeongjae Choi [@ryanking13](https://github.com/ryanking13) (Pyodide)
- Tim Felgentreff [@timfel](https://github.com/timfel) (GraalPy) - Tim Felgentreff [@timfel](https://github.com/timfel) (GraalPy)
- Malcolm Smith [@mhsmith](https://github.com/mhsmith) (Android)
Credits Credits
------- -------
+1 -1
View File
@@ -1 +1 @@
__version__ = "3.1.0" __version__ = "3.1.3"
+57 -25
View File
@@ -9,7 +9,7 @@ import tarfile
import textwrap import textwrap
import traceback import traceback
import typing import typing
from collections.abc import Iterable, Sequence from collections.abc import Generator, Iterable, Sequence
from pathlib import Path from pathlib import Path
from tempfile import mkdtemp from tempfile import mkdtemp
from typing import Any, Literal, TextIO from typing import Any, Literal, TextIO
@@ -369,41 +369,61 @@ def print_preamble(platform: str, options: Options, identifiers: Sequence[str])
print(f"Cache folder: {CIBW_CACHE_PATH}") print(f"Cache folder: {CIBW_CACHE_PATH}")
print() print()
warnings = detect_warnings(options=options, identifiers=identifiers) warnings = detect_warnings(options=options)
for warning in warnings: for warning in warnings:
log.warning(warning) log.warning(warning)
error_list = list(detect_errors(options=options, identifiers=identifiers))
if error_list:
for error in error_list:
log.error(error)
msg = "\n".join(error_list)
raise errors.ConfigurationError(msg)
print("Here we go!\n") print("Here we go!\n")
def detect_warnings(*, options: Options, identifiers: Iterable[str]) -> list[str]: def detect_errors(*, options: Options, identifiers: Iterable[str]) -> Generator[str, None, None]:
warnings = [] # Check for deprecated CIBW_FREE_THREADED_SUPPORT environment variable
if "CIBW_FREE_THREADED_SUPPORT" in os.environ:
python_version_deprecation = ((3, 11), 3) yield (
if sys.version_info[:2] < python_version_deprecation[0]: "CIBW_FREE_THREADED_SUPPORT environment variable is no longer supported. "
python_version = ".".join(map(str, python_version_deprecation[0])) 'Use tool.cibuildwheel.enable = ["cpython-freethreading"] in pyproject.toml '
msg = ( "or set CIBW_ENABLE=cpython-freethreading instead."
f"cibuildwheel {python_version_deprecation[1]} will require Python {python_version}+, "
"please upgrade the Python version used to run cibuildwheel. "
"This does not affect the versions you can target when building wheels. See: https://cibuildwheel.pypa.io/en/stable/#what-does-it-do"
) )
warnings.append(msg)
# warn about deprecated {python} and {pip} # Deprecated {python} and {pip}
for option_name in ["test_command", "before_build"]: for option_name in ["test_command", "before_build"]:
option_values = [getattr(options.build_options(i), option_name) for i in identifiers] option_values = [getattr(options.build_options(i), option_name) for i in identifiers]
if any(o and ("{python}" in o or "{pip}" in o) for o in option_values): if any(o and ("{python}" in o or "{pip}" in o) for o in option_values):
# Reminder: in an f-string, double braces means literal single brace # Reminder: in an f-string, double braces means literal single brace
msg = ( yield (
f"{option_name}: '{{python}}' and '{{pip}}' are no longer supported " f"{option_name}: '{{python}}' and '{{pip}}' are no longer supported "
"and have been removed in cibuildwheel 3. Simply use 'python' or 'pip' instead." "and have been removed in cibuildwheel 3. Simply use 'python' or 'pip' instead."
) )
raise errors.ConfigurationError(msg)
def detect_warnings(*, options: Options) -> Generator[str, None, None]:
python_version_deprecation = ((3, 11), 3)
if sys.version_info[:2] < python_version_deprecation[0]:
python_version = ".".join(map(str, python_version_deprecation[0]))
yield (
f"cibuildwheel {python_version_deprecation[1]} will require Python {python_version}+, "
"please upgrade the Python version used to run cibuildwheel. "
"This does not affect the versions you can target when building wheels. See: https://cibuildwheel.pypa.io/en/stable/#what-does-it-do"
)
build_selector = options.globals.build_selector build_selector = options.globals.build_selector
test_selector = options.globals.test_selector test_selector = options.globals.test_selector
if EnableGroup.CPythonExperimentalRiscV64 in build_selector.enable:
yield (
"'cpython-experimental-riscv64' enable is deprecated and will be removed in a future version. "
"It should be removed from tool.cibuildwheel.enable in pyproject.toml "
"or CIBW_ENABLE environment variable."
)
all_valid_identifiers = [ all_valid_identifiers = [
config.identifier config.identifier
for module in ALL_PLATFORM_MODULES.values() for module in ALL_PLATFORM_MODULES.values()
@@ -417,27 +437,25 @@ def detect_warnings(*, options: Options, identifiers: Iterable[str]) -> list[str
identifier for identifier in all_valid_identifiers if enabled_selector(identifier) identifier for identifier in all_valid_identifiers if enabled_selector(identifier)
] ]
warnings += check_for_invalid_selectors( yield from check_for_invalid_selectors(
selector_name="build", selector_name="build",
selector_value=build_selector.build_config, selector_value=build_selector.build_config,
all_valid_identifiers=all_valid_identifiers, all_valid_identifiers=all_valid_identifiers,
all_enabled_identifiers=all_enabled_identifiers, all_enabled_identifiers=all_enabled_identifiers,
) )
warnings += check_for_invalid_selectors( yield from check_for_invalid_selectors(
selector_name="skip", selector_name="skip",
selector_value=build_selector.skip_config, selector_value=build_selector.skip_config,
all_valid_identifiers=all_valid_identifiers, all_valid_identifiers=all_valid_identifiers,
all_enabled_identifiers=all_enabled_identifiers, all_enabled_identifiers=all_enabled_identifiers,
) )
warnings += check_for_invalid_selectors( yield from check_for_invalid_selectors(
selector_name="test_skip", selector_name="test_skip",
selector_value=test_selector.skip_config, selector_value=test_selector.skip_config,
all_valid_identifiers=all_valid_identifiers, all_valid_identifiers=all_valid_identifiers,
all_enabled_identifiers=all_enabled_identifiers, all_enabled_identifiers=all_enabled_identifiers,
) )
return warnings
def check_for_invalid_selectors( def check_for_invalid_selectors(
*, *,
@@ -449,17 +467,31 @@ def check_for_invalid_selectors(
warnings = [] warnings = []
for selector in selector_value.split(): for selector in selector_value.split():
if not any(selector_matches(selector, i) for i in all_enabled_identifiers): selector_ = selector
if selector_name == "test_skip":
# macosx_universal2 uses an additional identifier for tests which ends with ":{arch}"
values = selector.split(":")
universal2_identifiers = filter(
lambda x: x.endswith("-macosx_universal2"), all_valid_identifiers
)
if len(values) == 2 and any(
selector_matches(selector_, f"{i}:{arch}")
for i in universal2_identifiers
for arch in ["arm64", "x86_64"]
):
# just ignore the arch part in the rest of the check
selector_ = values[0]
if not any(selector_matches(selector_, i) for i in all_enabled_identifiers):
msg = f"Invalid {selector_name} selector: {selector!r}. " msg = f"Invalid {selector_name} selector: {selector!r}. "
error_type: type = errors.ConfigurationError error_type: type = errors.ConfigurationError
if any(selector_matches(selector, i) for i in all_valid_identifiers): if any(selector_matches(selector_, i) for i in all_valid_identifiers):
msg += "This selector matches a group that wasn't enabled. Enable it using the `enable` option or remove this selector. " msg += "This selector matches a group that wasn't enabled. Enable it using the `enable` option or remove this selector. "
if "p2" in selector or "p35" in selector: if "p2" in selector_ or "p35" in selector_:
msg += f"cibuildwheel 3.x no longer supports Python < 3.8. Please use the 1.x series or update `{selector_name}`. " msg += f"cibuildwheel 3.x no longer supports Python < 3.8. Please use the 1.x series or update `{selector_name}`. "
error_type = errors.DeprecationError error_type = errors.DeprecationError
if "p36" in selector or "p37" in selector: if "p36" in selector_ or "p37" in selector_:
msg += f"cibuildwheel 3.x no longer supports Python < 3.8. Please use the 2.x series or update `{selector_name}`. " msg += f"cibuildwheel 3.x no longer supports Python < 3.8. Please use the 2.x series or update `{selector_name}`. "
error_type = errors.DeprecationError error_type = errors.DeprecationError
+4 -4
View File
@@ -242,11 +242,11 @@ class Logger:
github_summary = self._github_step_summary(duration=duration, options=options) github_summary = self._github_step_summary(duration=duration, options=options)
Path(summary_path).write_text(filter_ansi_codes(github_summary), encoding="utf-8") Path(summary_path).write_text(filter_ansi_codes(github_summary), encoding="utf-8")
n = len(self.summary) n_wheels = len([info for info in self.summary if info.filename])
s = "s" if n > 1 else "" s = "s" if n_wheels > 1 else ""
duration_str = humanize.naturaldelta(duration) duration_str = humanize.naturaldelta(duration)
print() print()
self._start_fold_group(f"{n} wheel{s} produced in {duration_str}") self._start_fold_group(f"{n_wheels} wheel{s} produced in {duration_str}")
for build_info in self.summary: for build_info in self.summary:
print(" ", build_info) print(" ", build_info)
self._end_fold_group() self._end_fold_group()
@@ -320,7 +320,7 @@ class Logger:
n_wheels = len([b for b in self.summary if b.filename]) n_wheels = len([b for b in self.summary if b.filename])
wheel_rows = "\n".join( wheel_rows = "\n".join(
"<tr>" "<tr>"
f"<td nowrap>{'<samp>' + b.filename.name + '</samp>' if b.filename else '*Build only*'}</td>" f"<td nowrap>{'<samp>' + b.filename.name + '</samp>' if b.filename else '*Test only*'}</td>"
f"<td nowrap>{b.size or 'N/A'}</td>" f"<td nowrap>{b.size or 'N/A'}</td>"
f"<td nowrap><samp>{b.identifier}</samp></td>" f"<td nowrap><samp>{b.identifier}</samp></td>"
f"<td nowrap>{humanize.naturaldelta(b.duration)}</td>" f"<td nowrap>{humanize.naturaldelta(b.duration)}</td>"
+1 -1
View File
@@ -665,7 +665,7 @@ class Options:
build_config = args.only build_config = args.only
skip_config = "" skip_config = ""
architectures = Architecture.all_archs(self.platform) architectures = Architecture.all_archs(self.platform)
enable = set(EnableGroup) enable |= EnableGroup.all_groups()
build_selector = BuildSelector( build_selector = BuildSelector(
build_config=build_config, build_config=build_config,
+3 -2
View File
@@ -6,6 +6,7 @@ import re
import shlex import shlex
import shutil import shutil
import subprocess import subprocess
import sys
from collections.abc import Iterable, Iterator from collections.abc import Iterable, Iterator
from dataclasses import dataclass from dataclasses import dataclass
from os.path import relpath from os.path import relpath
@@ -21,7 +22,7 @@ from elftools.common.exceptions import ELFError
from elftools.elf.elffile import ELFFile from elftools.elf.elffile import ELFFile
from filelock import FileLock from filelock import FileLock
from .. import errors, platforms from .. import errors, platforms # pylint: disable=cyclic-import
from ..architecture import Architecture, arch_synonym from ..architecture import Architecture, arch_synonym
from ..frontend import get_build_frontend_extra_flags, parse_config_settings from ..frontend import get_build_frontend_extra_flags, parse_config_settings
from ..logger import log from ..logger import log
@@ -517,7 +518,7 @@ def repair_default(
f"${{ORIGIN}}/{relpath(libs_dir, path.parent)}", f"${{ORIGIN}}/{relpath(libs_dir, path.parent)}",
path, path,
) )
call("wheel", "pack", unpacked_dir, "-d", repaired_wheel_dir) call(sys.executable, "-m", "wheel", "pack", unpacked_dir, "-d", repaired_wheel_dir)
def elf_file_filter(paths: Iterable[Path]) -> Iterator[tuple[Path, ELFFile]]: def elf_file_filter(paths: Iterable[Path]) -> Iterator[tuple[Path, ELFFile]]:
+6 -6
View File
@@ -232,10 +232,10 @@ python_configurations = [
[ios] [ios]
python_configurations = [ python_configurations = [
{ identifier = "cp313-ios_arm64_iphoneos", version = "3.13", url = "https://github.com/beeware/Python-Apple-support/releases/download/3.13-b9/Python-3.13-iOS-support.b9.tar.gz" }, { identifier = "cp313-ios_arm64_iphoneos", version = "3.13", url = "https://github.com/beeware/Python-Apple-support/releases/download/3.13-b10/Python-3.13-iOS-support.b10.tar.gz" },
{ identifier = "cp313-ios_x86_64_iphonesimulator", version = "3.13", url = "https://github.com/beeware/Python-Apple-support/releases/download/3.13-b9/Python-3.13-iOS-support.b9.tar.gz" }, { identifier = "cp313-ios_x86_64_iphonesimulator", version = "3.13", url = "https://github.com/beeware/Python-Apple-support/releases/download/3.13-b10/Python-3.13-iOS-support.b10.tar.gz" },
{ identifier = "cp313-ios_arm64_iphonesimulator", version = "3.13", url = "https://github.com/beeware/Python-Apple-support/releases/download/3.13-b9/Python-3.13-iOS-support.b9.tar.gz" }, { identifier = "cp313-ios_arm64_iphonesimulator", version = "3.13", url = "https://github.com/beeware/Python-Apple-support/releases/download/3.13-b10/Python-3.13-iOS-support.b10.tar.gz" },
{ identifier = "cp314-ios_arm64_iphoneos", version = "3.14", url = "https://github.com/beeware/Python-Apple-support/releases/download/3.14-b5/Python-3.14-iOS-support.b5.tar.gz" }, { identifier = "cp314-ios_arm64_iphoneos", version = "3.14", url = "https://github.com/beeware/Python-Apple-support/releases/download/3.14-b6/Python-3.14-iOS-support.b6.tar.gz" },
{ identifier = "cp314-ios_x86_64_iphonesimulator", version = "3.14", url = "https://github.com/beeware/Python-Apple-support/releases/download/3.14-b5/Python-3.14-iOS-support.b5.tar.gz" }, { identifier = "cp314-ios_x86_64_iphonesimulator", version = "3.14", url = "https://github.com/beeware/Python-Apple-support/releases/download/3.14-b6/Python-3.14-iOS-support.b6.tar.gz" },
{ identifier = "cp314-ios_arm64_iphonesimulator", version = "3.14", url = "https://github.com/beeware/Python-Apple-support/releases/download/3.14-b5/Python-3.14-iOS-support.b5.tar.gz" }, { identifier = "cp314-ios_arm64_iphonesimulator", version = "3.14", url = "https://github.com/beeware/Python-Apple-support/releases/download/3.14-b6/Python-3.14-iOS-support.b6.tar.gz" },
] ]
@@ -76,7 +76,7 @@ requests==2.32.4
# via pyodide-build # via pyodide-build
resolvelib==1.2.0 resolvelib==1.2.0
# via pyodide-build # via pyodide-build
rich==14.0.0 rich==14.1.0
# via # via
# pyodide-build # pyodide-build
# pyodide-cli # pyodide-cli
@@ -76,7 +76,7 @@ requests==2.32.4
# via pyodide-build # via pyodide-build
resolvelib==1.2.0 resolvelib==1.2.0
# via pyodide-build # via pyodide-build
rich==14.0.0 rich==14.1.0
# via # via
# pyodide-build # pyodide-build
# pyodide-cli # pyodide-cli
+33 -33
View File
@@ -1,53 +1,53 @@
[x86_64] [x86_64]
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.07.23-1 manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.07.27-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.07.23-1 manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.07.27-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.07.23-1 manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.07.27-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2025.07.23-1 musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2025.07.27-1
[i686] [i686]
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.07.23-1 manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.07.27-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2025.07.23-1 manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2025.07.27-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2025.07.23-1 manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2025.07.27-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2025.07.23-1 musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2025.07.27-1
[aarch64] [aarch64]
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.07.23-1 manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.07.27-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.07.23-1 manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.07.27-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.07.23-1 manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.07.27-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2025.07.23-1 musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2025.07.27-1
[ppc64le] [ppc64le]
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2025.07.23-1 manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2025.07.27-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2025.07.23-1 manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2025.07.27-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_ppc64le:2025.07.23-1 manylinux_2_34 = quay.io/pypa/manylinux_2_34_ppc64le:2025.07.27-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2025.07.23-1 musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2025.07.27-1
[s390x] [s390x]
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2025.07.23-1 manylinux2014 = quay.io/pypa/manylinux2014_s390x:2025.07.27-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2025.07.23-1 manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2025.07.27-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_s390x:2025.07.23-1 manylinux_2_34 = quay.io/pypa/manylinux_2_34_s390x:2025.07.27-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2025.07.23-1 musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2025.07.27-1
[pypy_x86_64] [pypy_x86_64]
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.07.23-1 manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.07.27-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.07.23-1 manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.07.27-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.07.23-1 manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.07.27-1
[pypy_i686] [pypy_i686]
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.07.23-1 manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.07.27-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2025.07.23-1 manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2025.07.27-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2025.07.23-1 manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2025.07.27-1
[pypy_aarch64] [pypy_aarch64]
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.07.23-1 manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.07.27-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.07.23-1 manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.07.27-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.07.23-1 manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.07.27-1
[armv7l] [armv7l]
manylinux_2_31 = quay.io/pypa/manylinux_2_31_armv7l:2025.07.23-1 manylinux_2_31 = quay.io/pypa/manylinux_2_31_armv7l:2025.07.27-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2025.07.23-1 musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2025.07.27-1
[riscv64] [riscv64]
manylinux_2_39 = quay.io/pypa/manylinux_2_39_riscv64:2025.07.23-1 manylinux_2_39 = quay.io/pypa/manylinux_2_39_riscv64:2025.07.27-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_riscv64:2025.07.23-1 musllinux_1_2 = quay.io/pypa/musllinux_1_2_riscv64:2025.07.27-1
@@ -1,455 +1,455 @@
{ {
"releases": [ "releases": [
{ {
"tag": "20250712", "tag": "20250723",
"assets": [ "assets": [
{ {
"name": "cpython-3.10.18+20250712-aarch64-apple-darwin-install_only.tar.gz", "name": "cpython-3.10.18+20250723-aarch64-apple-darwin-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-aarch64-apple-darwin-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-aarch64-apple-darwin-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-aarch64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.10.18+20250723-aarch64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-aarch64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-aarch64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-armv7-unknown-linux-gnueabi-install_only.tar.gz", "name": "cpython-3.10.18+20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-armv7-unknown-linux-gnueabi-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-armv7-unknown-linux-gnueabihf-install_only.tar.gz", "name": "cpython-3.10.18+20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-armv7-unknown-linux-gnueabihf-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-i686-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.10.18+20250723-i686-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-i686-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-i686-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-ppc64le-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.10.18+20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-ppc64le-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-riscv64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.10.18+20250723-riscv64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-riscv64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-riscv64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-s390x-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.10.18+20250723-s390x-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-s390x-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-s390x-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-x86_64-apple-darwin-install_only.tar.gz", "name": "cpython-3.10.18+20250723-x86_64-apple-darwin-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-x86_64-apple-darwin-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-x86_64-apple-darwin-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-x86_64-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.10.18+20250723-x86_64-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-x86_64-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-x86_64-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-x86_64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.10.18+20250723-x86_64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-x86_64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-x86_64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-x86_64-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.10.18+20250723-x86_64-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-x86_64-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-x86_64-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-x86_64_v2-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.10.18+20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-x86_64_v2-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-x86_64_v2-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.10.18+20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-x86_64_v2-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-x86_64_v3-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.10.18+20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-x86_64_v3-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-x86_64_v3-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.10.18+20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-x86_64_v3-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-x86_64_v4-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.10.18+20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-x86_64_v4-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.10.18+20250712-x86_64_v4-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.10.18+20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.10.18%2B20250712-x86_64_v4-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.10.18%2B20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-aarch64-apple-darwin-install_only.tar.gz", "name": "cpython-3.11.13+20250723-aarch64-apple-darwin-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-aarch64-apple-darwin-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-aarch64-apple-darwin-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-aarch64-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.11.13+20250723-aarch64-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-aarch64-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-aarch64-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-aarch64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.11.13+20250723-aarch64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-aarch64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-aarch64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-armv7-unknown-linux-gnueabi-install_only.tar.gz", "name": "cpython-3.11.13+20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-armv7-unknown-linux-gnueabi-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-armv7-unknown-linux-gnueabihf-install_only.tar.gz", "name": "cpython-3.11.13+20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-armv7-unknown-linux-gnueabihf-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-i686-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.11.13+20250723-i686-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-i686-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-i686-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-ppc64le-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.11.13+20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-ppc64le-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-riscv64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.11.13+20250723-riscv64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-riscv64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-riscv64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-s390x-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.11.13+20250723-s390x-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-s390x-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-s390x-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-x86_64-apple-darwin-install_only.tar.gz", "name": "cpython-3.11.13+20250723-x86_64-apple-darwin-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-x86_64-apple-darwin-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-x86_64-apple-darwin-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-x86_64-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.11.13+20250723-x86_64-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-x86_64-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-x86_64-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-x86_64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.11.13+20250723-x86_64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-x86_64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-x86_64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-x86_64-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.11.13+20250723-x86_64-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-x86_64-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-x86_64-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-x86_64_v2-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.11.13+20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-x86_64_v2-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-x86_64_v2-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.11.13+20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-x86_64_v2-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-x86_64_v3-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.11.13+20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-x86_64_v3-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-x86_64_v3-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.11.13+20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-x86_64_v3-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-x86_64_v4-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.11.13+20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-x86_64_v4-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.11.13+20250712-x86_64_v4-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.11.13+20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.11.13%2B20250712-x86_64_v4-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.11.13%2B20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-aarch64-apple-darwin-install_only.tar.gz", "name": "cpython-3.12.11+20250723-aarch64-apple-darwin-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-aarch64-apple-darwin-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-aarch64-apple-darwin-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-aarch64-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.12.11+20250723-aarch64-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-aarch64-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-aarch64-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-aarch64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.12.11+20250723-aarch64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-aarch64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-aarch64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-armv7-unknown-linux-gnueabi-install_only.tar.gz", "name": "cpython-3.12.11+20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-armv7-unknown-linux-gnueabi-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-armv7-unknown-linux-gnueabihf-install_only.tar.gz", "name": "cpython-3.12.11+20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-armv7-unknown-linux-gnueabihf-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-i686-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.12.11+20250723-i686-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-i686-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-i686-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-ppc64le-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.12.11+20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-ppc64le-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-riscv64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.12.11+20250723-riscv64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-riscv64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-riscv64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-s390x-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.12.11+20250723-s390x-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-s390x-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-s390x-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-x86_64-apple-darwin-install_only.tar.gz", "name": "cpython-3.12.11+20250723-x86_64-apple-darwin-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-x86_64-apple-darwin-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-x86_64-apple-darwin-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-x86_64-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.12.11+20250723-x86_64-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-x86_64-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-x86_64-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-x86_64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.12.11+20250723-x86_64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-x86_64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-x86_64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-x86_64-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.12.11+20250723-x86_64-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-x86_64-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-x86_64-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-x86_64_v2-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.12.11+20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-x86_64_v2-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-x86_64_v2-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.12.11+20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-x86_64_v2-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-x86_64_v3-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.12.11+20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-x86_64_v3-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-x86_64_v3-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.12.11+20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-x86_64_v3-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-x86_64_v4-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.12.11+20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-x86_64_v4-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.12.11+20250712-x86_64_v4-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.12.11+20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.12.11%2B20250712-x86_64_v4-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.12.11%2B20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-aarch64-apple-darwin-install_only.tar.gz", "name": "cpython-3.13.5+20250723-aarch64-apple-darwin-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-aarch64-apple-darwin-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-aarch64-apple-darwin-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-aarch64-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.13.5+20250723-aarch64-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-aarch64-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-aarch64-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-aarch64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.13.5+20250723-aarch64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-aarch64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-aarch64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-armv7-unknown-linux-gnueabi-install_only.tar.gz", "name": "cpython-3.13.5+20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-armv7-unknown-linux-gnueabi-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-armv7-unknown-linux-gnueabihf-install_only.tar.gz", "name": "cpython-3.13.5+20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-armv7-unknown-linux-gnueabihf-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-i686-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.13.5+20250723-i686-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-i686-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-i686-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-ppc64le-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.13.5+20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-ppc64le-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-riscv64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.13.5+20250723-riscv64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-riscv64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-riscv64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-s390x-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.13.5+20250723-s390x-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-s390x-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-s390x-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-x86_64-apple-darwin-install_only.tar.gz", "name": "cpython-3.13.5+20250723-x86_64-apple-darwin-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-x86_64-apple-darwin-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-x86_64-apple-darwin-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-x86_64-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.13.5+20250723-x86_64-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-x86_64-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-x86_64-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-x86_64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.13.5+20250723-x86_64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-x86_64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-x86_64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-x86_64-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.13.5+20250723-x86_64-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-x86_64-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-x86_64-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-x86_64_v2-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.13.5+20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-x86_64_v2-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-x86_64_v2-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.13.5+20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-x86_64_v2-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-x86_64_v3-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.13.5+20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-x86_64_v3-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-x86_64_v3-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.13.5+20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-x86_64_v3-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-x86_64_v4-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.13.5+20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-x86_64_v4-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.13.5+20250712-x86_64_v4-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.13.5+20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.13.5%2B20250712-x86_64_v4-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.13.5%2B20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-aarch64-apple-darwin-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-aarch64-apple-darwin-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-aarch64-apple-darwin-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-aarch64-apple-darwin-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-aarch64-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-aarch64-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-aarch64-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-aarch64-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-aarch64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-aarch64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-aarch64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-aarch64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-armv7-unknown-linux-gnueabi-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-armv7-unknown-linux-gnueabi-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-armv7-unknown-linux-gnueabihf-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-armv7-unknown-linux-gnueabihf-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-i686-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-i686-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-i686-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-i686-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-ppc64le-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-ppc64le-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-riscv64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-riscv64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-riscv64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-riscv64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-s390x-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-s390x-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-s390x-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-s390x-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-x86_64-apple-darwin-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-x86_64-apple-darwin-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-x86_64-apple-darwin-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-x86_64-apple-darwin-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-x86_64-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-x86_64-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-x86_64-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-x86_64-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-x86_64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-x86_64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-x86_64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-x86_64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-x86_64-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-x86_64-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-x86_64-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-x86_64-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-x86_64_v2-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-x86_64_v2-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-x86_64_v2-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-x86_64_v2-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-x86_64_v3-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-x86_64_v3-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-x86_64_v3-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-x86_64_v3-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-x86_64_v4-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-x86_64_v4-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.14.0b4+20250712-x86_64_v4-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.14.0rc1+20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.14.0b4%2B20250712-x86_64_v4-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.14.0rc1%2B20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-aarch64-apple-darwin-install_only.tar.gz", "name": "cpython-3.9.23+20250723-aarch64-apple-darwin-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-aarch64-apple-darwin-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-aarch64-apple-darwin-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-aarch64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.9.23+20250723-aarch64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-aarch64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-aarch64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-armv7-unknown-linux-gnueabi-install_only.tar.gz", "name": "cpython-3.9.23+20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-armv7-unknown-linux-gnueabi-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-armv7-unknown-linux-gnueabihf-install_only.tar.gz", "name": "cpython-3.9.23+20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-armv7-unknown-linux-gnueabihf-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-i686-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.9.23+20250723-i686-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-i686-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-i686-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-ppc64le-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.9.23+20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-ppc64le-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-riscv64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.9.23+20250723-riscv64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-riscv64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-riscv64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-s390x-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.9.23+20250723-s390x-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-s390x-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-s390x-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-x86_64-apple-darwin-install_only.tar.gz", "name": "cpython-3.9.23+20250723-x86_64-apple-darwin-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-x86_64-apple-darwin-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-x86_64-apple-darwin-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-x86_64-pc-windows-msvc-install_only.tar.gz", "name": "cpython-3.9.23+20250723-x86_64-pc-windows-msvc-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-x86_64-pc-windows-msvc-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-x86_64-pc-windows-msvc-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-x86_64-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.9.23+20250723-x86_64-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-x86_64-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-x86_64-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-x86_64-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.9.23+20250723-x86_64-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-x86_64-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-x86_64-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-x86_64_v2-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.9.23+20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-x86_64_v2-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-x86_64_v2-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.9.23+20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-x86_64_v2-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-x86_64_v3-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.9.23+20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-x86_64_v3-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-x86_64_v3-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.9.23+20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-x86_64_v3-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-x86_64_v4-unknown-linux-gnu-install_only.tar.gz", "name": "cpython-3.9.23+20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-x86_64_v4-unknown-linux-gnu-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz"
}, },
{ {
"name": "cpython-3.9.23+20250712-x86_64_v4-unknown-linux-musl-install_only.tar.gz", "name": "cpython-3.9.23+20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz",
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250712/cpython-3.9.23%2B20250712-x86_64_v4-unknown-linux-musl-install_only.tar.gz" "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250723/cpython-3.9.23%2B20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz"
} }
] ]
} }
+1 -5
View File
@@ -39,7 +39,7 @@ class EnableGroup(StrEnum):
@classmethod @classmethod
def all_groups(cls) -> frozenset["EnableGroup"]: def all_groups(cls) -> frozenset["EnableGroup"]:
return frozenset(cls) return frozenset(set(cls) - {cls.CPythonExperimentalRiscV64})
@classmethod @classmethod
def parse_option_value(cls, value: str) -> frozenset["EnableGroup"]: def parse_option_value(cls, value: str) -> frozenset["EnableGroup"]:
@@ -93,10 +93,6 @@ class BuildSelector:
return False return False
if EnableGroup.PyPyEoL not in self.enable and fnmatch(build_id, "pp3?-*"): if EnableGroup.PyPyEoL not in self.enable and fnmatch(build_id, "pp3?-*"):
return False return False
if EnableGroup.CPythonExperimentalRiscV64 not in self.enable and fnmatch(
build_id, "*_riscv64"
):
return False
if EnableGroup.GraalPy not in self.enable and fnmatch(build_id, "gp*"): if EnableGroup.GraalPy not in self.enable and fnmatch(build_id, "gp*"):
return False return False
# TODO: Re-enable this when we have Pyodide prereleases again (e.g., 0.29.0a1+) # TODO: Re-enable this when we have Pyodide prereleases again (e.g., 0.29.0a1+)
+2
View File
@@ -143,6 +143,8 @@ def virtualenv(
venv_env["VIRTUAL_ENV"] = str(venv_path) venv_env["VIRTUAL_ENV"] = str(venv_path)
if not use_uv and pip_version == "embed": if not use_uv and pip_version == "embed":
call( call(
"python",
"-m",
"pip", "pip",
"install", "install",
"--upgrade", "--upgrade",
+31
View File
@@ -4,6 +4,37 @@ title: Changelog
# Changelog # Changelog
### v3.1.3
_1 August 2025_
- 🐛 Fix bug where "latest" dependencies couldn't update to pip 25.2 on Windows (#2537)
- 🛠 Use pytest-rerunfailures to improve some of our iOS/Android tests (#2527, #2539)
- 🛠 Remove some GraalPy Windows workarounds in our tests (#2501)
### v3.1.2
_29 July 2025_
- ⚠️ Add an error if `CIBW_FREE_THREADING_SUPPORT` is set; you are likely missing 3.13t wheels, please use the `enable`/`CIBW_ENABLE` (#2520)
- 🛠 `riscv64` now enabled if you target that architecture, it's now supported on PyPI (#2509)
- 🛠 Add warning when using `cpython-experimental-riscv64` (no longer needed) (#2526, #2528)
- 🛠 iOS versions bumped, fixing issues with 3.14 (now RC 1) (#2530)
- 🐛 Fix bug in Android running wheel from our GitHub Action (#2517)
- 🐛 Fix warning when using `test-skip` of `"*-macosx_universal2:arm64"` (#2522)
- 🐛 Fix incorrect number of wheels reported in logs, again (#2517)
- 📚 We welcome our Android platform maintainer (#2516)
### v3.1.1
_24 July 2025_
- 🐛 Fix a bug showing an incorrect wheel count at the end of execution, and misrepresenting test-only runs in the GitHub Action summary (#2512)
- 📚 Docs fix (#2510)
### v3.1.0 ### v3.1.0
_23 July 2025_ _23 July 2025_
+7
View File
@@ -664,3 +664,10 @@
os: [apple, linux, windows] os: [apple, linux, windows]
pypi: streaming-form-data pypi: streaming-form-data
notes: Streaming parser for multipart/form-data written in Cython notes: Streaming parser for multipart/form-data written in Cython
- name: falcon
gh: falconry/falcon
ci: [github]
os: [apple, linux, windows]
pypi: falcon
notes: Falcon is a no-magic ASGI/WSGI API and microservices framework; it uses cibuildwheel for (optional) Cython extensions.
+3 -3
View File
@@ -110,7 +110,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@v3.1.0 uses: pypa/cibuildwheel@v3.1.3
``` ```
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.
@@ -132,7 +132,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==3.1.0 cibuildwheel==3.1.3
``` ```
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:
@@ -297,7 +297,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==3.1.0 --output-dir wheelhouse pipx run cibuildwheel==3.1.3 --output-dir wheelhouse
pipx run twine upload wheelhouse/*.whl pipx run twine upload wheelhouse/*.whl
``` ```
-6
View File
@@ -71,7 +71,6 @@ The list of supported and currently selected build identifiers can also be retri
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).
Windows arm64 platform support is experimental. Windows arm64 platform support is experimental.
Linux riscv64 platform support is experimental and requires an explicit opt-in through [`enable`](#enable).
See the [cibuildwheel 2 documentation](https://cibuildwheel.pypa.io/en/2.x/) for past end-of-life versions of Python. See the [cibuildwheel 2 documentation](https://cibuildwheel.pypa.io/en/2.x/) for past end-of-life versions of Python.
@@ -201,8 +200,6 @@ Options:
to use [`build`](#build-skip) with this option to target specific to use [`build`](#build-skip) with this option to target specific
architectures via build selectors. architectures via build selectors.
Linux riscv64 platform support is experimental and requires an explicit opt-in through [`enable`](#enable).
Default: `auto` Default: `auto`
| Runner | `native` | `auto` | `auto64` | `auto32` | | Runner | `native` | `auto` | `auto64` | `auto32` |
@@ -356,9 +353,6 @@ values are:
free-threaded builds are no longer experimental, so this enable is not needed. free-threaded builds are no longer experimental, so this enable is not needed.
- `pypy`: Enable PyPy. - `pypy`: Enable PyPy.
- `pypy-eol`: Enable PyPy versions that have passed end of life (if still available). - `pypy-eol`: Enable PyPy versions that have passed end of life (if still available).
- `cpython-experimental-riscv64`: Enable experimental riscv64 builds. Those builds
are disabled by default as they can't be uploaded to PyPI and a PEP will most likely
be required before this can happen.
- `graalpy`: Enable GraalPy. - `graalpy`: Enable GraalPy.
- `pyodide-prerelease`: Pyodide versions that haven't released yet, if one is - `pyodide-prerelease`: Pyodide versions that haven't released yet, if one is
available. Safe if you are shipping a site with an early build, not for available. Safe if you are shipping a site with an early build, not for
+1 -1
View File
@@ -265,7 +265,7 @@ iOS is effectively 2 platforms - physical devices, and simulators. While the API
* `arm64_iphoneos` (for physical iOS devices); * `arm64_iphoneos` (for physical iOS devices);
* `arm64_iphonesimulator` (for iOS simulators running on Apple Silicon macOS machines); and * `arm64_iphonesimulator` (for iOS simulators running on Apple Silicon macOS machines); and
* `x64_64_iphonesimulator` (for iOS simulators running on Intel macOS machines). * `x86_64_iphonesimulator` (for iOS simulators running on Intel macOS machines).
By default, cibuildwheel will build all wheels for the CPU architecture of the build machine. You can build all wheels for all architectures by specifying `--archs all`. By default, cibuildwheel will build all wheels for the CPU architecture of the build machine. You can build all wheels for all architectures by specifying `--archs all`.
+2
View File
@@ -23,6 +23,8 @@ cibuildwheel
!!!tip !!!tip
You can pass the `--platform linux` option to cibuildwheel to build Linux wheels, even if you're not on Linux. On most machines, the easiest builds to try are the Linux builds. You don't need any software installed except a Docker daemon, such as [Docker Desktop](https://www.docker.com/get-started/). Each platform that cibuildwheel supports has its own system requirements and platform-specific behaviors. See the [platforms page](platforms.md) for details. You can pass the `--platform linux` option to cibuildwheel to build Linux wheels, even if you're not on Linux. On most machines, the easiest builds to try are the Linux builds. You don't need any software installed except a Docker daemon, such as [Docker Desktop](https://www.docker.com/get-started/). Each platform that cibuildwheel supports has its own system requirements and platform-specific behaviors. See the [platforms page](platforms.md) for details.
When building locally for macOS or iOS, regardless of the Python you use to invoke cibuildwheel, you'll need [official Python.org](https://www.python.org/downloads/) installations on your machine. `cibuildwheel` won't perform the build using unofficial Python installations such as from `brew` or `uv`.
You should see the builds taking place. You can experiment with [options](options.md) using pyproject.toml or environment variables. You should see the builds taking place. You can experiment with [options](options.md) using pyproject.toml or environment variables.
!!! tab "pyproject.toml" !!! tab "pyproject.toml"
+3 -3
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==3.1.0 pip3 install cibuildwheel==3.1.3
displayName: Install dependencies displayName: Install dependencies
- bash: cibuildwheel --output-dir wheelhouse . - bash: cibuildwheel --output-dir wheelhouse .
displayName: Build wheels displayName: Build wheels
@@ -20,7 +20,7 @@ jobs:
- 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==3.1.0 python3 -m pip install cibuildwheel==3.1.3
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==3.1.0 pip install cibuildwheel==3.1.3
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==3.1.0 python3 -m pip install --user cibuildwheel==3.1.3
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==3.1.0 python3 -m pip install --user cibuildwheel==3.1.3
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==3.1.0 pip3 install cibuildwheel==3.1.3
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==3.1.0 - python -m pip install cibuildwheel==3.1.3
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==3.1.0 - python -m pip install cibuildwheel==3.1.3
run_cibuildwheel_script: run_cibuildwheel_script:
- cibuildwheel - cibuildwheel
wheels_artifacts: wheels_artifacts:
+1 -1
View File
@@ -61,7 +61,7 @@ jobs:
sudo udevadm trigger --name-match=kvm sudo udevadm trigger --name-match=kvm
- name: Build wheels - name: Build wheels
uses: pypa/cibuildwheel@v3.1.0 uses: pypa/cibuildwheel@v3.1.3
env: env:
CIBW_PLATFORM: ${{ matrix.platform || 'auto' }} CIBW_PLATFORM: ${{ matrix.platform || 'auto' }}
# Can also be configured directly, using `with:` # Can also be configured directly, using `with:`
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Build wheels - name: Build wheels
uses: pypa/cibuildwheel@v3.1.0 uses: pypa/cibuildwheel@v3.1.3
# env: # env:
# CIBW_SOME_OPTION: value # CIBW_SOME_OPTION: value
# ... # ...
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Build wheels - name: Build wheels
run: pipx run cibuildwheel==3.1.0 run: pipx run cibuildwheel==3.1.3
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v4
with: with:
+1 -1
View File
@@ -21,7 +21,7 @@ jobs:
platforms: all platforms: all
- name: Build wheels - name: Build wheels
uses: pypa/cibuildwheel@v3.1.0 uses: pypa/cibuildwheel@v3.1.3
env: env:
# configure cibuildwheel on Linux to build native archs ('auto'), # configure cibuildwheel on Linux to build native archs ('auto'),
# and to split the remaining architectures between the x86_64 and # and to split the remaining architectures between the x86_64 and
+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==3.1.0 - python -m pip install cibuildwheel==3.1.3
- 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 --allow-downgrade --version 3.12.4 - choco install python -y --allow-downgrade --version 3.12.4
- choco install git.install -y - choco install git.install -y
- py -m pip install cibuildwheel==3.1.0 - py -m pip install cibuildwheel==3.1.3
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==3.1.0 - python3 -m pip install cibuildwheel==3.1.3
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==3.1.0 - python -m pip install cibuildwheel==3.1.3
# 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==3.1.0 - python3 -m pip install cibuildwheel==3.1.3
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==3.1.0 - python3 -m pip install cibuildwheel==3.1.3
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==3.1.0 twine install: python3 -m pip install cibuildwheel==3.1.3 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==3.1.0 twine install: python3 -m pip install cibuildwheel==3.1.3 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
+5 -1
View File
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
[project] [project]
name = "cibuildwheel" name = "cibuildwheel"
version = "3.1.0" version = "3.1.3"
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"
@@ -88,6 +88,7 @@ test = [
"jinja2", "jinja2",
"pytest-timeout", "pytest-timeout",
"pytest-xdist", "pytest-xdist",
"pytest-rerunfailures",
"pytest>=6", "pytest>=6",
"setuptools", "setuptools",
"tomli_w", "tomli_w",
@@ -109,6 +110,9 @@ filterwarnings = ["error"]
log_cli_level = "INFO" log_cli_level = "INFO"
markers = [ markers = [
"serial: tests that must *not* be run in parallel (deselect with '-m \"not serial\"')", "serial: tests that must *not* be run in parallel (deselect with '-m \"not serial\"')",
"ios: tests that run on iOS",
"android: tests that run on Android",
"pyodide: tests that run on Pyodide",
] ]
[tool.mypy] [tool.mypy]
+9 -6
View File
@@ -12,6 +12,9 @@ import pytest
from .test_projects import new_c_project from .test_projects import new_c_project
from .utils import cibuildwheel_run, expected_wheels from .utils import cibuildwheel_run, expected_wheels
pytestmark = pytest.mark.android
CIBW_PLATFORM = os.environ.get("CIBW_PLATFORM", "android") CIBW_PLATFORM = os.environ.get("CIBW_PLATFORM", "android")
if CIBW_PLATFORM != "android": if CIBW_PLATFORM != "android":
pytest.skip(f"{CIBW_PLATFORM=}", allow_module_level=True) pytest.skip(f"{CIBW_PLATFORM=}", allow_module_level=True)
@@ -28,12 +31,10 @@ if (platform.system(), platform.machine()) not in [
) )
# Detect CI services which have the Android SDK pre-installed. # Detect CI services which have the Android SDK pre-installed.
ci_supports_build = any( ci_supports_build = (
key in os.environ ("CIRRUS_CI" in os.environ and platform.system() == "Darwin")
for key in [ or "GITHUB_ACTIONS" in os.environ
"GITHUB_ACTIONS", or "TF_BUILD" in os.environ # Azure Pipelines
"TF_BUILD", # Azure Pipelines
]
) )
if "ANDROID_HOME" not in os.environ: if "ANDROID_HOME" not in os.environ:
@@ -89,6 +90,8 @@ def test_android_home(tmp_path, capfd):
assert "ANDROID_HOME environment variable is not set" in capfd.readouterr().err assert "ANDROID_HOME environment variable is not set" in capfd.readouterr().err
# Can fail to setup
@pytest.mark.flaky(reruns=2)
def test_frontend_good(tmp_path): def test_frontend_good(tmp_path):
new_c_project().generate(tmp_path) new_c_project().generate(tmp_path)
wheels = cibuildwheel_run( wheels = cibuildwheel_run(
+1 -3
View File
@@ -63,9 +63,7 @@ def test(tmp_path, build_frontend_env):
# the 'false ||' bit is to ensure this command runs in a shell on # the 'false ||' bit is to ensure this command runs in a shell on
# mac/linux. # mac/linux.
"CIBW_TEST_COMMAND": f"false || {utils.invoke_pytest()} {{project}}/test", "CIBW_TEST_COMMAND": f"false || {utils.invoke_pytest()} {{project}}/test",
# pytest fails on GraalPy 24.2.0 on Windows so we skip it there "CIBW_TEST_COMMAND_WINDOWS": "pytest {project}/test",
# until https://github.com/oracle/graalpython/issues/490 is fixed
"CIBW_TEST_COMMAND_WINDOWS": "where graalpy || pytest {project}/test",
**build_frontend_env, **build_frontend_env,
}, },
) )
+15 -3
View File
@@ -12,6 +12,12 @@ from cibuildwheel.ci import CIProvider, detect_ci_provider
from . import test_projects, utils from . import test_projects, utils
pytestmark = pytest.mark.ios
CIBW_PLATFORM = os.environ.get("CIBW_PLATFORM", "ios")
if CIBW_PLATFORM != "ios":
pytest.skip(f"{CIBW_PLATFORM=}", allow_module_level=True)
basic_project_files = { basic_project_files = {
"tests/test_platform.py": f""" "tests/test_platform.py": f"""
import platform import platform
@@ -43,7 +49,9 @@ def skip_if_ios_testing_not_supported() -> None:
# it's easy to overload the CI machine if there are multiple test processes # it's easy to overload the CI machine if there are multiple test processes
# running multithreaded processes. Therefore, they're put in the serial group, # running multithreaded processes. Therefore, they're put in the serial group,
# which is guaranteed to run single-process. # which is guaranteed to run single-process.
# This can also fail the first time sometimes.
@pytest.mark.serial @pytest.mark.serial
@pytest.mark.flaky(reruns=2)
@pytest.mark.parametrize( @pytest.mark.parametrize(
"build_config", "build_config",
[ [
@@ -163,6 +171,7 @@ def test_ios_testing_with_placeholder(tmp_path, capfd):
@pytest.mark.serial @pytest.mark.serial
@pytest.mark.flaky(reruns=2)
def test_ios_test_command_short_circuit(tmp_path, capfd): def test_ios_test_command_short_circuit(tmp_path, capfd):
skip_if_ios_testing_not_supported() skip_if_ios_testing_not_supported()
@@ -230,6 +239,7 @@ def test_no_xbuild_tool_definition(tmp_path, capfd):
project_dir, project_dir,
add_env={ add_env={
"CIBW_PLATFORM": "ios", "CIBW_PLATFORM": "ios",
"CIBW_BUILD": "cp313-*",
"CIBW_TEST_SKIP": "*", "CIBW_TEST_SKIP": "*",
}, },
) )
@@ -239,7 +249,7 @@ def test_no_xbuild_tool_definition(tmp_path, capfd):
"spam", "spam",
"0.1.0", "0.1.0",
platform="ios", platform="ios",
python_abi_tags=["cp313-cp313", "cp314-cp314"], python_abi_tags=["cp313-cp313"],
) )
assert set(actual_wheels) == set(expected_wheels) assert set(actual_wheels) == set(expected_wheels)
@@ -263,13 +273,14 @@ def test_empty_xbuild_tool_definition(tmp_path, capfd):
project_dir, project_dir,
add_env={ add_env={
"CIBW_PLATFORM": "ios", "CIBW_PLATFORM": "ios",
"CIBW_BUILD": "cp313-*",
"CIBW_TEST_SKIP": "*", "CIBW_TEST_SKIP": "*",
"CIBW_XBUILD_TOOLS": "", "CIBW_XBUILD_TOOLS": "",
}, },
) )
expected_wheels = utils.expected_wheels( expected_wheels = utils.expected_wheels(
"spam", "0.1.0", platform="ios", python_abi_tags=["cp313-cp313", "cp314-cp314"] "spam", "0.1.0", platform="ios", python_abi_tags=["cp313-cp313"]
) )
assert set(actual_wheels) == set(expected_wheels) assert set(actual_wheels) == set(expected_wheels)
@@ -299,6 +310,7 @@ def test_ios_test_command_without_python_dash_m(tmp_path, capfd):
project_dir, project_dir,
add_env={ add_env={
"CIBW_PLATFORM": "ios", "CIBW_PLATFORM": "ios",
"CIBW_BUILD": "cp313-*",
"CIBW_TEST_COMMAND": "pytest ./tests", "CIBW_TEST_COMMAND": "pytest ./tests",
"CIBW_TEST_SOURCES": "tests", "CIBW_TEST_SOURCES": "tests",
"CIBW_TEST_REQUIRES": "pytest", "CIBW_TEST_REQUIRES": "pytest",
@@ -307,7 +319,7 @@ def test_ios_test_command_without_python_dash_m(tmp_path, capfd):
) )
expected_wheels = utils.expected_wheels( expected_wheels = utils.expected_wheels(
"spam", "0.1.0", platform="ios", python_abi_tags=["cp313-cp313", "cp314-cp314"] "spam", "0.1.0", platform="ios", python_abi_tags=["cp313-cp313"]
) )
assert set(actual_wheels) == set(expected_wheels) assert set(actual_wheels) == set(expected_wheels)
+7
View File
@@ -1,4 +1,5 @@
import contextlib import contextlib
import os
import subprocess import subprocess
import sys import sys
import textwrap import textwrap
@@ -9,6 +10,12 @@ from cibuildwheel.util.file import CIBW_CACHE_PATH
from . import test_projects, utils from . import test_projects, utils
pytestmark = pytest.mark.pyodide
CIBW_PLATFORM = os.environ.get("CIBW_PLATFORM", "pyodide")
if CIBW_PLATFORM != "pyodide":
pytest.skip(f"{CIBW_PLATFORM=}", allow_module_level=True)
basic_project = test_projects.new_c_project() basic_project = test_projects.new_c_project()
basic_project.files["check_node.py"] = r""" basic_project.files["check_node.py"] = r"""
import sys import sys
+4 -12
View File
@@ -81,9 +81,7 @@ def test(tmp_path):
# the 'false ||' bit is to ensure this command runs in a shell on # the 'false ||' bit is to ensure this command runs in a shell on
# mac/linux. # mac/linux.
"CIBW_TEST_COMMAND": f"false || {utils.invoke_pytest()} {{project}}/test", "CIBW_TEST_COMMAND": f"false || {utils.invoke_pytest()} {{project}}/test",
# pytest fails on GraalPy 24.2.0 on Windows so we skip it there "CIBW_TEST_COMMAND_WINDOWS": "COLOR 00 || pytest {project}/test",
# until https://github.com/oracle/graalpython/issues/490 is fixed
"CIBW_TEST_COMMAND_WINDOWS": "COLOR 00 || where graalpy || pytest {project}/test",
}, },
) )
@@ -104,9 +102,7 @@ def test_extras_require(tmp_path):
# the 'false ||' bit is to ensure this command runs in a shell on # the 'false ||' bit is to ensure this command runs in a shell on
# mac/linux. # mac/linux.
"CIBW_TEST_COMMAND": f"false || {utils.invoke_pytest()} {{project}}/test", "CIBW_TEST_COMMAND": f"false || {utils.invoke_pytest()} {{project}}/test",
# pytest fails on GraalPy 24.2.0 on Windows so we skip it there "CIBW_TEST_COMMAND_WINDOWS": "COLOR 00 || pytest {project}/test",
# until https://github.com/oracle/graalpython/issues/490 is fixed
"CIBW_TEST_COMMAND_WINDOWS": "COLOR 00 || where graalpy || pytest {project}/test",
}, },
single_python=True, single_python=True,
) )
@@ -138,9 +134,7 @@ def test_dependency_groups(tmp_path):
# the 'false ||' bit is to ensure this command runs in a shell on # the 'false ||' bit is to ensure this command runs in a shell on
# mac/linux. # mac/linux.
"CIBW_TEST_COMMAND": f"false || {utils.invoke_pytest()} {{project}}/test", "CIBW_TEST_COMMAND": f"false || {utils.invoke_pytest()} {{project}}/test",
# pytest fails on GraalPy 24.2.0 on Windows so we skip it there "CIBW_TEST_COMMAND_WINDOWS": "COLOR 00 || pytest {project}/test",
# until https://github.com/oracle/graalpython/issues/490 is fixed
"CIBW_TEST_COMMAND_WINDOWS": "COLOR 00 || where graalpy || pytest {project}/test",
}, },
single_python=True, single_python=True,
) )
@@ -230,9 +224,7 @@ def test_test_sources(tmp_path):
project_dir, project_dir,
add_env={ add_env={
"CIBW_TEST_REQUIRES": "pytest", "CIBW_TEST_REQUIRES": "pytest",
# pytest fails on GraalPy 24.2.0 on Windows so we skip it there "CIBW_TEST_COMMAND_WINDOWS": "pytest",
# until https://github.com/oracle/graalpython/issues/490 is fixed
"CIBW_TEST_COMMAND_WINDOWS": "where graalpy || pytest",
"CIBW_TEST_COMMAND": utils.invoke_pytest(), "CIBW_TEST_COMMAND": utils.invoke_pytest(),
"CIBW_TEST_SOURCES": "test", "CIBW_TEST_SOURCES": "test",
}, },
+1 -1
View File
@@ -51,7 +51,7 @@ def get_platform() -> str:
raise Exception(msg) raise Exception(msg)
DEFAULT_CIBW_ENABLE = "cpython-freethreading cpython-prerelease cpython-experimental-riscv64" DEFAULT_CIBW_ENABLE = "cpython-freethreading cpython-prerelease"
def get_enable_groups() -> frozenset[EnableGroup]: def get_enable_groups() -> frozenset[EnableGroup]:
-9
View File
@@ -217,15 +217,6 @@ def test_build_free_threaded_python():
assert build_selector("cp313t-manylinux_x86_64") assert build_selector("cp313t-manylinux_x86_64")
def test_build_riscv64_enable():
build_selector = BuildSelector(build_config="*", skip_config="")
assert not build_selector("cp313-manylinux_riscv64")
build_selector = BuildSelector(
build_config="*", skip_config="", enable=frozenset([EnableGroup.CPythonExperimentalRiscV64])
)
assert build_selector("cp313-manylinux_riscv64")
def test_testing_selector(): def test_testing_selector():
# This is not a global import to keep pytest from collecting it as a test # This is not a global import to keep pytest from collecting it as a test
test_selector = cibuildwheel.selector.TestSelector(skip_config="cp36-*") test_selector = cibuildwheel.selector.TestSelector(skip_config="cp36-*")
+4 -2
View File
@@ -8,7 +8,7 @@ import pytest
from cibuildwheel import architecture from cibuildwheel import architecture
from cibuildwheel.logger import Logger from cibuildwheel.logger import Logger
from cibuildwheel.platforms import linux, macos, pyodide, windows from cibuildwheel.platforms import android, ios, linux, macos, pyodide, windows
from cibuildwheel.util import file from cibuildwheel.util import file
@@ -87,10 +87,12 @@ def platform(request, monkeypatch):
def intercepted_build_args(monkeypatch): def intercepted_build_args(monkeypatch):
intercepted = ArgsInterceptor() intercepted = ArgsInterceptor()
monkeypatch.setattr(android, "build", intercepted)
monkeypatch.setattr(ios, "build", intercepted)
monkeypatch.setattr(linux, "build", intercepted) monkeypatch.setattr(linux, "build", intercepted)
monkeypatch.setattr(macos, "build", intercepted) monkeypatch.setattr(macos, "build", intercepted)
monkeypatch.setattr(windows, "build", intercepted)
monkeypatch.setattr(pyodide, "build", intercepted) monkeypatch.setattr(pyodide, "build", intercepted)
monkeypatch.setattr(windows, "build", intercepted)
yield intercepted yield intercepted
+103
View File
@@ -1,3 +1,4 @@
import os
import sys import sys
import tomllib import tomllib
from fnmatch import fnmatch from fnmatch import fnmatch
@@ -16,6 +17,18 @@ from cibuildwheel.util.packaging import DependencyConstraints
# CIBW_PLATFORM is tested in main_platform_test.py # CIBW_PLATFORM is tested in main_platform_test.py
def test_old_free_threaded(monkeypatch, capsys):
monkeypatch.setenv("CIBW_FREE_THREADED_SUPPORT", "ON")
with pytest.raises(SystemExit):
main()
assert (
"CIBW_FREE_THREADED_SUPPORT environment variable is no longer supported."
in capsys.readouterr().err
)
@pytest.mark.usefixtures("platform") @pytest.mark.usefixtures("platform")
def test_output_dir(intercepted_build_args, monkeypatch): def test_output_dir(intercepted_build_args, monkeypatch):
OUTPUT_DIR = Path("some_output_dir") OUTPUT_DIR = Path("some_output_dir")
@@ -93,6 +106,32 @@ def test_invalid_skip_selector(monkeypatch, capsys, option_name, option_env_var)
assert f"Invalid {option_name} selector" in err assert f"Invalid {option_name} selector" in err
@pytest.mark.parametrize(
"selector", ["*-macosx_universal2:arm64", "*-macosx_universal2:x86_64", "*-macosx_arm64"]
)
@pytest.mark.usefixtures("platform", "intercepted_build_args")
def test_valid_test_skip_selector(monkeypatch, capsys, selector):
monkeypatch.setenv("CIBW_TEST_SKIP", selector)
main()
_, err = capsys.readouterr()
print(err)
assert "Invalid test_skip selector" not in err
@pytest.mark.parametrize("selector", ["*-macosx_universal2:invalid", "*-macosx_arm64:arm64"])
@pytest.mark.usefixtures("platform", "intercepted_build_args")
def test_invalid_test_skip_selector(monkeypatch, capsys, selector):
monkeypatch.setenv("CIBW_TEST_SKIP", selector)
main()
_, err = capsys.readouterr()
print(err)
assert "Invalid test_skip selector" in err
@pytest.mark.usefixtures("platform", "intercepted_build_args") @pytest.mark.usefixtures("platform", "intercepted_build_args")
def test_empty_selector(monkeypatch): def test_empty_selector(monkeypatch):
monkeypatch.setenv("CIBW_SKIP", "*") monkeypatch.setenv("CIBW_SKIP", "*")
@@ -103,6 +142,70 @@ def test_empty_selector(monkeypatch):
assert e.value.code == 3 assert e.value.code == 3
@pytest.mark.usefixtures("platform", "intercepted_build_args")
def test_riscv64_warning1(monkeypatch, capsys):
monkeypatch.setenv("CIBW_ENABLE", "cpython-experimental-riscv64")
main()
_, err = capsys.readouterr()
print(err)
assert "'cpython-experimental-riscv64' enable is deprecated" in err
@pytest.mark.usefixtures("platform", "intercepted_build_args")
def test_riscv64_warning2(monkeypatch, capsys, tmp_path):
local_path = tmp_path / "tmp_project"
os.mkdir(local_path) # noqa:PTH102 Path.mkdir has been monkeypatched already
local_path.joinpath("setup.py").touch()
monkeypatch.setattr(
sys, "argv", ["cibuildwheel", "--only", "cp313-manylinux_riscv64", str(local_path)]
)
monkeypatch.setenv("CIBW_ENABLE", "cpython-experimental-riscv64")
main()
_, err = capsys.readouterr()
print(err)
assert "'cpython-experimental-riscv64' enable is deprecated" in err
@pytest.mark.usefixtures("platform", "intercepted_build_args")
def test_riscv64_no_warning(monkeypatch, capsys, tmp_path):
local_path = tmp_path / "tmp_project"
os.mkdir(local_path) # noqa:PTH102 Path.mkdir has been monkeypatched already
local_path.joinpath("setup.py").touch()
monkeypatch.setattr(
sys, "argv", ["cibuildwheel", "--only", "cp313-manylinux_riscv64", str(local_path)]
)
main()
_, err = capsys.readouterr()
print(err)
assert "'cpython-experimental-riscv64' enable is deprecated" not in err
@pytest.mark.usefixtures("platform", "intercepted_build_args")
def test_riscv64_no_warning2(monkeypatch, capsys, tmp_path):
local_path = tmp_path / "tmp_project"
os.mkdir(local_path) # noqa:PTH102 Path.mkdir has been monkeypatched already
local_path.joinpath("setup.py").touch()
monkeypatch.setattr(
sys, "argv", ["cibuildwheel", "--only", "cp313-manylinux_riscv64", str(local_path)]
)
monkeypatch.setenv("CIBW_ENABLE", "all")
main()
_, err = capsys.readouterr()
print(err)
assert "'cpython-experimental-riscv64' enable is deprecated" not in err
@pytest.mark.parametrize( @pytest.mark.parametrize(
("architecture", "image", "full_image"), ("architecture", "image", "full_image"),
[ [
+4 -1
View File
@@ -15,9 +15,11 @@ def test_printout_wheels(capsys):
log.colors_enabled = False log.colors_enabled = False
with log.print_summary(options=OPTIONS_DEFAULTS): with log.print_summary(options=OPTIONS_DEFAULTS):
# the number of BuildInfo with & without filename shall be different for this test
log.summary = [ log.summary = [
BuildInfo(identifier="id1", filename=None, duration=3), BuildInfo(identifier="id1", filename=None, duration=3),
BuildInfo(identifier="id2", filename=FILE, duration=2), BuildInfo(identifier="id2", filename=FILE, duration=2),
BuildInfo(identifier="id3", filename=FILE, duration=3),
] ]
captured = capsys.readouterr() captured = capsys.readouterr()
@@ -25,7 +27,8 @@ def test_printout_wheels(capsys):
assert "id1" in captured.out assert "id1" in captured.out
assert "id2" in captured.out assert "id2" in captured.out
assert "wheels produced in" in captured.out assert "id3" in captured.out
assert "2 wheels produced in" in captured.out
assert "SHA256=" in captured.out assert "SHA256=" in captured.out