Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c923d83ad9 | ||
|
|
55ee8e49bf | ||
|
|
afe486c21f | ||
|
|
1c1ba8a22e | ||
|
|
33b75f491a | ||
|
|
c59c2fe70d | ||
|
|
24b64c5cd1 | ||
|
|
6425e48fed | ||
|
|
0264b4d03a | ||
|
|
68f9762657 | ||
|
|
95e827ece1 | ||
|
|
ff9a284f21 | ||
|
|
cade3864de | ||
|
|
63bdd4f043 | ||
|
|
5952330610 | ||
|
|
8db3538534 | ||
|
|
e5caaec292 | ||
|
|
5a1712daed | ||
|
|
a4c6d16811 | ||
|
|
78a246a901 | ||
|
|
47c5a31c1b | ||
|
|
3ebb6bd942 |
@@ -1,3 +1,7 @@
|
||||
# Specification files for platform maintainers
|
||||
cibuildwheel/platforms/ios.py @freakboy3742
|
||||
cibuildwheel/platforms/pyodide.py @hoodmane @ryanking13 @agriyakhetarpal
|
||||
cibuildwheel/platforms/android.py @mhsmith
|
||||
|
||||
# Constraints files
|
||||
cibuildwheel/resources/constraints-pyodide*.txt @hoodmane @ryanking13 @agriyakhetarpal
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
dist:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- uses: hynek/build-and-inspect-python-package@v2
|
||||
|
||||
@@ -27,7 +27,7 @@ jobs:
|
||||
attestations: write
|
||||
|
||||
steps:
|
||||
- uses: actions/download-artifact@v4
|
||||
- uses: actions/download-artifact@v5
|
||||
with:
|
||||
name: Packages
|
||||
path: dist
|
||||
|
||||
+45
-11
@@ -37,7 +37,7 @@ jobs:
|
||||
name: Linters (mypy, ruff, etc.)
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/setup-python@v5
|
||||
id: python
|
||||
with:
|
||||
@@ -47,22 +47,47 @@ jobs:
|
||||
run: pipx run --python "${{ steps.python.outputs.python-path }}" nox -s pylint -- --output-format=github
|
||||
|
||||
test:
|
||||
name: Test on ${{ matrix.os }} (${{ matrix.python_version }})
|
||||
name: Test on ${{ matrix.os }} (${{ matrix.python_version }}) ${{ matrix.test_select }}
|
||||
needs: lint
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, windows-11-arm, macos-13, macos-15]
|
||||
python_version: ['3.13']
|
||||
include:
|
||||
# Min Python
|
||||
- os: ubuntu-latest
|
||||
python_version: '3.11'
|
||||
# Max Python
|
||||
- os: ubuntu-latest
|
||||
python_version: '3.14'
|
||||
- os: ubuntu-latest
|
||||
python_version: '3.13'
|
||||
test_select: android
|
||||
- os: ubuntu-24.04-arm
|
||||
python_version: '3.13'
|
||||
- os: windows-latest
|
||||
python_version: '3.13'
|
||||
- os: windows-11-arm
|
||||
python_version: '3.13'
|
||||
- os: macos-13
|
||||
python_version: '3.13'
|
||||
- os: macos-15
|
||||
python_version: '3.13'
|
||||
- os: macos-13
|
||||
python_version: '3.13'
|
||||
test_select: ios
|
||||
- os: macos-14 # 20250811 macos-15 update caused havoc with iOS simulators
|
||||
python_version: '3.13'
|
||||
test_select: ios
|
||||
- os: macos-13
|
||||
python_version: '3.13'
|
||||
test_select: android
|
||||
- os: macos-15
|
||||
python_version: '3.13'
|
||||
test_select: android
|
||||
timeout-minutes: 180
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/setup-python@v5
|
||||
name: Install Python ${{ matrix.python_version }}
|
||||
with:
|
||||
@@ -129,10 +154,12 @@ jobs:
|
||||
output-dir: wheelhouse
|
||||
env:
|
||||
CIBW_ARCHS_MACOS: x86_64 universal2 arm64
|
||||
CIBW_BUILD_FRONTEND: 'build[uv]'
|
||||
CIBW_BUILD_FRONTEND: ${{ matrix.test_select && 'build' || 'build[uv]' }}
|
||||
CIBW_PLATFORM: ${{ matrix.test_select }}
|
||||
|
||||
- name: Run a sample build (GitHub Action, only)
|
||||
uses: ./
|
||||
if: matrix.test_select == ''
|
||||
with:
|
||||
package-dir: sample_proj
|
||||
output-dir: wheelhouse_only
|
||||
@@ -152,6 +179,8 @@ jobs:
|
||||
|
||||
- name: Run a sample build (GitHub Action, config-file)
|
||||
uses: ./
|
||||
env:
|
||||
CIBW_PLATFORM: ${{ matrix.test_select }}
|
||||
with:
|
||||
package-dir: sample_proj
|
||||
output-dir: wheelhouse_config_file
|
||||
@@ -161,9 +190,14 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
test $(find wheelhouse -name '*.whl' | wc -l) -ge 1
|
||||
test $(find wheelhouse_only -name '*.whl' | wc -l) -eq 1
|
||||
test $(find wheelhouse_config_file -name '*.whl' | wc -l) -eq 1
|
||||
|
||||
- name: Check Action artifacts (native build only)
|
||||
if: matrix.test_select == ''
|
||||
shell: bash
|
||||
run: |
|
||||
test $(find wheelhouse_only -name '*.whl' | wc -l) -eq 1
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }}
|
||||
@@ -171,7 +205,7 @@ jobs:
|
||||
|
||||
- name: Test cibuildwheel
|
||||
run: |
|
||||
uv run --no-sync bin/run_tests.py ${{ (runner.os == 'Linux' && runner.arch == 'X64') && '--run-podman' || '' }}
|
||||
uv run --no-sync bin/run_tests.py --test-select=${{ matrix.test_select || 'native' }} ${{ (runner.os == 'Linux' && runner.arch == 'X64') && '--run-podman' || '' }}
|
||||
|
||||
emulated-archs:
|
||||
name: Get qemu emulated architectures
|
||||
@@ -180,7 +214,7 @@ jobs:
|
||||
outputs:
|
||||
archs: ${{ steps.archs.outputs.archs }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.x"
|
||||
@@ -203,7 +237,7 @@ jobs:
|
||||
matrix:
|
||||
arch: ${{ fromJSON(needs.emulated-archs.outputs.archs) }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.x"
|
||||
@@ -223,7 +257,7 @@ jobs:
|
||||
runs-on: ubuntu-24.04
|
||||
timeout-minutes: 180
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/setup-python@v5
|
||||
name: Install Python 3.12
|
||||
with:
|
||||
|
||||
@@ -30,7 +30,7 @@ jobs:
|
||||
app-id: ${{ secrets.CIBUILDWHEEL_BOT_APP_ID }}
|
||||
private-key: ${{ secrets.CIBUILDWHEEL_BOT_APP_PRIVATE_KEY }}
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- uses: wntrblm/nox@2025.05.01
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ jobs:
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Update the ${{ env.TAG_NAME }} tag
|
||||
id: update-major-minor-tag
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
repos:
|
||||
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v5.0.0
|
||||
rev: v6.0.0
|
||||
hooks:
|
||||
- id: check-case-conflict
|
||||
- id: check-merge-conflict
|
||||
@@ -14,14 +14,14 @@ repos:
|
||||
- id: trailing-whitespace
|
||||
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
rev: v0.12.5
|
||||
rev: v0.12.9
|
||||
hooks:
|
||||
- id: ruff
|
||||
args: ["--fix", "--show-fixes"]
|
||||
- id: ruff-format
|
||||
|
||||
- repo: https://github.com/pre-commit/mirrors-mypy
|
||||
rev: v1.17.0
|
||||
rev: v1.17.1
|
||||
hooks:
|
||||
- id: mypy
|
||||
name: mypy 3.11 on cibuildwheel/
|
||||
@@ -54,7 +54,7 @@ repos:
|
||||
additional_dependencies: *mypy-dependencies
|
||||
|
||||
- repo: https://github.com/shellcheck-py/shellcheck-py
|
||||
rev: v0.10.0.1
|
||||
rev: v0.11.0.1
|
||||
hooks:
|
||||
- id: shellcheck
|
||||
|
||||
@@ -83,7 +83,7 @@ repos:
|
||||
|
||||
|
||||
- repo: https://github.com/python-jsonschema/check-jsonschema
|
||||
rev: 0.33.2
|
||||
rev: 0.33.3
|
||||
hooks:
|
||||
- id: check-dependabot
|
||||
- id: check-github-actions
|
||||
|
||||
@@ -91,13 +91,13 @@ jobs:
|
||||
os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, windows-11-arm, macos-13, macos-latest]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
# Used to host cibuildwheel
|
||||
- uses: actions/setup-python@v5
|
||||
|
||||
- name: Install cibuildwheel
|
||||
run: python -m pip install cibuildwheel==3.1.3
|
||||
run: python -m pip install cibuildwheel==3.1.4
|
||||
|
||||
- name: Build wheels
|
||||
run: python -m cibuildwheel --output-dir wheelhouse
|
||||
@@ -178,8 +178,8 @@ Here are some repos that use cibuildwheel.
|
||||
| Name | CI | OS | Notes |
|
||||
|-----------------------------------|----|----|:------|
|
||||
| [scikit-learn][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The machine learning library. A complex but clean config using many of cibuildwheel's features to build a large project with Cython and C++ extensions. |
|
||||
| [pytorch-fairseq][] | ![github icon][] | ![apple icon][] ![linux icon][] | Facebook AI Research Sequence-to-Sequence Toolkit written in Python. |
|
||||
| [duckdb][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | DuckDB is an analytical in-process SQL database management system |
|
||||
| [pytorch-fairseq][] | ![github icon][] | ![apple icon][] ![linux icon][] | Facebook AI Research Sequence-to-Sequence Toolkit written in Python. |
|
||||
| [NumPy][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The fundamental package for scientific computing with Python. |
|
||||
| [Tornado][] | ![github icon][] | ![linux icon][] ![apple icon][] ![windows icon][] | Tornado is a Python web framework and asynchronous networking library. Uses stable ABI for a small C extension. |
|
||||
| [NCNN][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | ncnn is a high-performance neural network inference framework optimized for the mobile platform |
|
||||
@@ -189,8 +189,8 @@ Here are some repos that use cibuildwheel.
|
||||
| [Kivy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Open source UI framework written in Python, running on Windows, Linux, macOS, Android and iOS |
|
||||
|
||||
[scikit-learn]: https://github.com/scikit-learn/scikit-learn
|
||||
[pytorch-fairseq]: https://github.com/facebookresearch/fairseq
|
||||
[duckdb]: https://github.com/duckdb/duckdb
|
||||
[pytorch-fairseq]: https://github.com/facebookresearch/fairseq
|
||||
[NumPy]: https://github.com/numpy/numpy
|
||||
[Tornado]: https://github.com/tornadoweb/tornado
|
||||
[NCNN]: https://github.com/Tencent/ncnn
|
||||
@@ -227,14 +227,32 @@ Changelog
|
||||
|
||||
<!-- [[[cog from readme_changelog import mini_changelog; print(mini_changelog()) ]]] -->
|
||||
|
||||
### v3.1.4
|
||||
|
||||
_19 August 2025_
|
||||
|
||||
- ✨ Add a `--clean-cache` command to clean up our cache (#2489)
|
||||
- 🛠 Update Python to 3.14rc2 and other patch version bumps (#2542, #2556)
|
||||
- 🛠 Update Pyodide to 0.28.2 (#2562, #2558)
|
||||
- 🐛 Fix resolution with `pyodide-build` when `dependency-versions` is set (#2548)
|
||||
- 🐛 Set `CMAKE_FIND_ROOT_PATH_MODE_PACKAGE` to `BOTH` on Android (#2547)
|
||||
- 🐛 Add `patchelf` dependency for platforms that can build Android wheels (#2552)
|
||||
- 🐛 Ignore empty values for `CIBW_ARCHS` like most other environment variables (#2541)
|
||||
- 💼 The `color` and `suggest_on_error` argparse options are now default in 3.14rc1+ (#2554)
|
||||
- 💼 Use the virtualenv release URL instead of blob URL (should be more robust) (#2555)
|
||||
- 🧪 For iOS, lowering to macos-14 is needed for now due to issues with GitHub's runner images (#2557)
|
||||
- 🧪 Split out platforms iOS and Android in our tests (#2519)
|
||||
- 🧪 Fix and enable doctests (#2546)
|
||||
- 📚 Improve our docs on free-threading (#2549)
|
||||
|
||||
|
||||
### 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)
|
||||
|
||||
- 🧪 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
|
||||
@@ -272,19 +290,10 @@ _23 July 2025_
|
||||
- 🛠 Fixed a typo in the 3.9 MUSL riscv64 identifier (`cp39-musllinux_ricv64` -> `cp39-musllinux_riscv64`) (#2490)
|
||||
- 🛠 Mistyping `--only` now shows the correct possibilities, and even suggests near matches on Python 3.14+ (#2499)
|
||||
- 🛠 Only support one output from the repair step on linux like other platforms; auditwheel fixed this over four years ago! (#2478)
|
||||
- 🛠 We now use pattern matching extensively (#2434)
|
||||
- 💼 We now use pattern matching extensively (#2434)
|
||||
- 📚 We now have platform maintainers for our special platforms and interpreters! (#2481)
|
||||
|
||||
|
||||
|
||||
### v3.0.1
|
||||
|
||||
_5 July 2025_
|
||||
|
||||
- 🛠 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)
|
||||
|
||||
<!-- [[[end]]] (sum: Fe+mD8YR4+) -->
|
||||
<!-- [[[end]]] (sum: loynkRqdzf) -->
|
||||
|
||||
---
|
||||
|
||||
|
||||
+46
-47
@@ -16,62 +16,61 @@ pr:
|
||||
- noxfile.py
|
||||
|
||||
jobs:
|
||||
- job: linux_311
|
||||
- job: tests
|
||||
strategy:
|
||||
matrix:
|
||||
linux_311:
|
||||
imageName: "ubuntu-latest"
|
||||
pythonVersion: "3.11"
|
||||
testSelect: "native"
|
||||
android_311:
|
||||
imageName: "ubuntu-latest"
|
||||
pythonVersion: "3.11"
|
||||
testSelect: "android"
|
||||
macos_311:
|
||||
imageName: "macos-latest"
|
||||
pythonVersion: "3.11"
|
||||
testSelect: "native"
|
||||
ios_311:
|
||||
imageName: "macos-latest"
|
||||
pythonVersion: "3.11"
|
||||
testSelect: "ios"
|
||||
android_macos_311:
|
||||
imageName: "macos-latest"
|
||||
pythonVersion: "3.11"
|
||||
testSelect: "android"
|
||||
windows_311:
|
||||
imageName: "windows-latest"
|
||||
pythonVersion: "3.11"
|
||||
testSelect: "native"
|
||||
timeoutInMinutes: 180
|
||||
pool: {vmImage: 'ubuntu-latest'}
|
||||
pool:
|
||||
vmImage: $(imageName)
|
||||
|
||||
steps:
|
||||
- task: UsePythonVersion@0
|
||||
inputs:
|
||||
versionSpec: '3.11'
|
||||
versionSpec: $(pythonVersion)
|
||||
|
||||
- task: JavaToolInstaller@0
|
||||
condition: and(eq(variables['testSelect'], 'android'), eq(variables['Agent.OS'], 'Linux'))
|
||||
inputs:
|
||||
versionSpec: '17'
|
||||
jdkArchitectureOption: 'x64'
|
||||
jdkSourceOption: 'PreInstalled'
|
||||
- bash: |
|
||||
docker run --rm --privileged docker.io/tonistiigi/binfmt:latest --install all
|
||||
python -m pip install -U pip
|
||||
python -m pip install -e. --group test
|
||||
if [ "$(Build.SourceBranch)" = "refs/heads/main" ]; then
|
||||
echo "INFO: Exporting CIBW_ENABLE=all for main branch test run."
|
||||
export CIBW_ENABLE=all
|
||||
else
|
||||
echo "INFO: CIBW_ENABLE not set for this branch ($(Build.SourceBranch))."
|
||||
fi
|
||||
python ./bin/run_tests.py
|
||||
|
||||
- job: macos_311
|
||||
pool: {vmImage: 'macOS-latest'}
|
||||
timeoutInMinutes: 120
|
||||
steps:
|
||||
- task: UsePythonVersion@0
|
||||
inputs:
|
||||
versionSpec: '3.11'
|
||||
- bash: |
|
||||
python -m pip install -U pip
|
||||
python -m pip install -e. --group test
|
||||
if [ "$(Build.SourceBranch)" = "refs/heads/main" ]; then
|
||||
echo "INFO: Exporting CIBW_ENABLE=all for main branch test run."
|
||||
export CIBW_ENABLE=all
|
||||
else
|
||||
echo "INFO: CIBW_ENABLE not set for this branch ($(Build.SourceBranch))."
|
||||
fi
|
||||
python ./bin/run_tests.py
|
||||
- bash: docker run --rm --privileged docker.io/tonistiigi/binfmt:latest --install all
|
||||
condition: and(eq(variables['imageName'], 'ubuntu-latest'), eq(variables['testSelect'], 'native'))
|
||||
displayName: 'Install binfmt on Linux'
|
||||
|
||||
- bash: python -m pip install -U pip && python -m pip install -e. --group test
|
||||
displayName: 'Update pip and install cibuildwheel --group test'
|
||||
|
||||
- bash: echo "##vso[task.setvariable variable=CIBW_ENABLE;]all"
|
||||
condition: eq(variables['Build.SourceBranch'], 'refs/heads/main')
|
||||
displayName: Set CIBW_ENABLE to all (main branch)
|
||||
|
||||
- job: windows_311
|
||||
pool: {vmImage: 'windows-latest'}
|
||||
timeoutInMinutes: 180
|
||||
steps:
|
||||
- task: UsePythonVersion@0
|
||||
inputs:
|
||||
versionSpec: '3.11'
|
||||
- bash: |
|
||||
python -m pip install -U pip
|
||||
python -m pip install -e. --group test
|
||||
if [ "$(Build.SourceBranch)" = "refs/heads/main" ]; then
|
||||
echo "INFO: Exporting CIBW_ENABLE=all for main branch test run."
|
||||
export CIBW_ENABLE=all
|
||||
else
|
||||
echo "INFO: CIBW_ENABLE not set for this branch ($(Build.SourceBranch))."
|
||||
fi
|
||||
python ./bin/run_tests.py
|
||||
echo "CIBW_ENABLE = $CIBW_ENABLE"
|
||||
python ./bin/run_tests.py --test-select $(testSelect)
|
||||
displayName: 'Run tests'
|
||||
|
||||
@@ -6,17 +6,12 @@
|
||||
|
||||
import argparse
|
||||
import copy
|
||||
import functools
|
||||
import json
|
||||
import sys
|
||||
from typing import Any
|
||||
|
||||
import yaml
|
||||
|
||||
make_parser = functools.partial(argparse.ArgumentParser, allow_abbrev=False)
|
||||
if sys.version_info >= (3, 14):
|
||||
make_parser = functools.partial(make_parser, color=True, suggest_on_error=True)
|
||||
parser = make_parser()
|
||||
parser = argparse.ArgumentParser(allow_abbrev=False)
|
||||
parser.add_argument("--schemastore", action="store_true", help="Generate schema_store version")
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
+51
-19
@@ -2,7 +2,6 @@
|
||||
|
||||
|
||||
import argparse
|
||||
import functools
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
@@ -14,10 +13,7 @@ if __name__ == "__main__":
|
||||
else:
|
||||
default_cpu_count = os.process_cpu_count() or 2
|
||||
|
||||
make_parser = functools.partial(argparse.ArgumentParser, allow_abbrev=False)
|
||||
if sys.version_info >= (3, 14):
|
||||
make_parser = functools.partial(make_parser, color=True, suggest_on_error=True)
|
||||
parser = make_parser()
|
||||
parser = argparse.ArgumentParser(allow_abbrev=False)
|
||||
parser.add_argument(
|
||||
"--run-podman", action="store_true", default=False, help="run podman tests (linux only)"
|
||||
)
|
||||
@@ -27,26 +23,66 @@ if __name__ == "__main__":
|
||||
default=default_cpu_count,
|
||||
help="number of processes to use for testing",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--test-select",
|
||||
choices={"all", "native", "android", "ios", "pyodide"},
|
||||
default="all",
|
||||
help="Either 'native' or 'android'/'ios'/'pyodide'",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
# move cwd to the project root
|
||||
os.chdir(Path(__file__).resolve().parents[1])
|
||||
|
||||
# doc tests
|
||||
doc_test_args = [sys.executable, "-m", "pytest", "cibuildwheel"]
|
||||
|
||||
print(
|
||||
"\n\n================================== DOC TESTS ==================================",
|
||||
flush=True,
|
||||
)
|
||||
result = subprocess.run(doc_test_args, check=False)
|
||||
if result.returncode not in (0, 5):
|
||||
# Allow case where no doctests are collected (returncode 5) because
|
||||
# circleci sets an explicit "-k" filter that disables doctests. There
|
||||
# isn't a pattern that will only select doctests. This can be removed
|
||||
# and have check=True if the circleci PYTEST_ADDOPTS is removed.
|
||||
raise subprocess.CalledProcessError(
|
||||
result.returncode, result.args, output=result.stdout, stderr=result.stderr
|
||||
)
|
||||
|
||||
# unit tests
|
||||
print(
|
||||
"\n\n================================== UNIT TESTS ==================================",
|
||||
flush=True,
|
||||
)
|
||||
unit_test_args = [sys.executable, "-m", "pytest", "unit_test"]
|
||||
|
||||
if sys.platform.startswith("linux") and os.environ.get("CIBW_PLATFORM", "linux") == "linux":
|
||||
if (
|
||||
sys.platform.startswith("linux")
|
||||
and os.environ.get("CIBW_PLATFORM", "linux") == "linux"
|
||||
and args.test_select in ["all", "native"]
|
||||
):
|
||||
# run the docker unit tests only on Linux
|
||||
unit_test_args += ["--run-docker"]
|
||||
|
||||
if args.run_podman:
|
||||
unit_test_args += ["--run-podman"]
|
||||
|
||||
subprocess.run(unit_test_args, check=True)
|
||||
|
||||
print(
|
||||
"\n\n================================== UNIT TESTS ==================================",
|
||||
"\n\n=========================== SERIAL INTEGRATION TESTS ===========================",
|
||||
flush=True,
|
||||
)
|
||||
subprocess.run(unit_test_args, check=True)
|
||||
|
||||
match args.test_select:
|
||||
case "all":
|
||||
marks = []
|
||||
case "native":
|
||||
marks = ["not pyodide", "not android", "not ios"]
|
||||
case mark:
|
||||
marks = [f"{mark}"]
|
||||
|
||||
# Run the serial integration tests without multiple processes
|
||||
serial_integration_test_args = [
|
||||
@@ -54,7 +90,7 @@ if __name__ == "__main__":
|
||||
"-m",
|
||||
"pytest",
|
||||
"-m",
|
||||
"serial",
|
||||
f"{' and '.join(['serial', *marks])}",
|
||||
"-x",
|
||||
"--durations",
|
||||
"0",
|
||||
@@ -62,19 +98,19 @@ if __name__ == "__main__":
|
||||
"test",
|
||||
"-vv",
|
||||
]
|
||||
print(
|
||||
"\n\n=========================== SERIAL INTEGRATION TESTS ===========================",
|
||||
flush=True,
|
||||
)
|
||||
|
||||
subprocess.run(serial_integration_test_args, check=True)
|
||||
|
||||
# Non-serial integration tests
|
||||
print(
|
||||
"\n\n========================= NON-SERIAL INTEGRATION TESTS =========================",
|
||||
flush=True,
|
||||
)
|
||||
integration_test_args = [
|
||||
sys.executable,
|
||||
"-m",
|
||||
"pytest",
|
||||
"-m",
|
||||
"not serial",
|
||||
f"{' and '.join(['not serial', *marks])}",
|
||||
f"--numprocesses={args.num_processes}",
|
||||
"-x",
|
||||
"--durations",
|
||||
@@ -87,8 +123,4 @@ if __name__ == "__main__":
|
||||
if sys.platform.startswith("linux") and args.run_podman:
|
||||
integration_test_args += ["--run-podman"]
|
||||
|
||||
print(
|
||||
"\n\n========================= NON-SERIAL INTEGRATION TESTS =========================",
|
||||
flush=True,
|
||||
)
|
||||
subprocess.run(integration_test_args, check=True)
|
||||
|
||||
+1
-5
@@ -2,7 +2,6 @@
|
||||
|
||||
|
||||
import argparse
|
||||
import functools
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
@@ -13,10 +12,7 @@ if __name__ == "__main__":
|
||||
# move cwd to the project root
|
||||
os.chdir(Path(__file__).resolve().parents[1])
|
||||
|
||||
make_parser = functools.partial(argparse.ArgumentParser, allow_abbrev=False)
|
||||
if sys.version_info >= (3, 14):
|
||||
make_parser = functools.partial(make_parser, color=True, suggest_on_error=True)
|
||||
parser = make_parser(description="Runs a sample build")
|
||||
parser = argparse.ArgumentParser(description="Runs a sample build", allow_abbrev=False)
|
||||
parser.add_argument("project_python_path", nargs="?", default="test.test_0_basic.basic_project")
|
||||
|
||||
options = parser.parse_args()
|
||||
|
||||
+31
-30
@@ -4,17 +4,18 @@
|
||||
import dataclasses
|
||||
import difflib
|
||||
import logging
|
||||
import subprocess
|
||||
import tomllib
|
||||
from pathlib import Path
|
||||
from typing import Final
|
||||
|
||||
import click
|
||||
import rich
|
||||
from packaging.version import InvalidVersion, Version
|
||||
from packaging.version import Version
|
||||
from rich.logging import RichHandler
|
||||
from rich.syntax import Syntax
|
||||
|
||||
from cibuildwheel.extra import github_api_request
|
||||
|
||||
log = logging.getLogger("cibw")
|
||||
|
||||
# Looking up the dir instead of using utils.resources_dir
|
||||
@@ -30,32 +31,26 @@ GET_VIRTUALENV_URL_TEMPLATE: Final[str] = (
|
||||
|
||||
@dataclasses.dataclass(frozen=True, order=True)
|
||||
class VersionTuple:
|
||||
name: str
|
||||
download_url: str
|
||||
version: Version
|
||||
version_string: str
|
||||
|
||||
|
||||
def git_ls_remote_versions(url: str) -> list[VersionTuple]:
|
||||
versions: list[VersionTuple] = []
|
||||
tags = subprocess.run(
|
||||
["git", "ls-remote", "--tags", url], check=True, text=True, capture_output=True
|
||||
).stdout.splitlines()
|
||||
for tag in tags:
|
||||
_, ref = tag.split()
|
||||
assert ref.startswith("refs/tags/")
|
||||
version_string = ref[10:]
|
||||
try:
|
||||
version = Version(version_string)
|
||||
if version.is_devrelease:
|
||||
log.info("Ignoring development release %r", str(version))
|
||||
continue
|
||||
if version.is_prerelease:
|
||||
log.info("Ignoring pre-release %r", str(version))
|
||||
continue
|
||||
versions.append(VersionTuple(version, version_string))
|
||||
except InvalidVersion:
|
||||
log.warning("Ignoring ref %r", ref)
|
||||
versions.sort(reverse=True)
|
||||
return versions
|
||||
def get_latest_virtualenv_release() -> VersionTuple:
|
||||
response = github_api_request("repos/pypa/get-virtualenv/releases/latest")
|
||||
tag_name = response["tag_name"]
|
||||
|
||||
asset = next(
|
||||
(asset for asset in response["assets"] if asset["name"] == "virtualenv.pyz"),
|
||||
None,
|
||||
)
|
||||
if not asset:
|
||||
msg = "No asset named 'virtualenv.pyz' found in the latest release of get-virtualenv."
|
||||
raise RuntimeError(msg)
|
||||
|
||||
return VersionTuple(
|
||||
version=Version(tag_name), name=tag_name, download_url=asset["browser_download_url"]
|
||||
)
|
||||
|
||||
|
||||
@click.command()
|
||||
@@ -78,14 +73,20 @@ def update_virtualenv(force: bool, level: str) -> None:
|
||||
with toml_file_path.open("rb") as f:
|
||||
configurations = tomllib.load(f)
|
||||
default = configurations.pop("default")
|
||||
version = str(default["version"])
|
||||
versions = git_ls_remote_versions(GET_VIRTUALENV_GITHUB)
|
||||
if versions[0].version > Version(version):
|
||||
version = versions[0].version_string
|
||||
local_version = str(default["version"])
|
||||
|
||||
latest_release = get_latest_virtualenv_release()
|
||||
|
||||
if latest_release.version > Version(local_version):
|
||||
version = latest_release.name
|
||||
url = latest_release.download_url
|
||||
else:
|
||||
version = local_version
|
||||
url = default["url"]
|
||||
|
||||
configurations["default"] = {
|
||||
"version": version,
|
||||
"url": GET_VIRTUALENV_URL_TEMPLATE.format(version=version),
|
||||
"url": url,
|
||||
}
|
||||
result_toml = "".join(
|
||||
f'{key} = {{ version = "{value["version"]}", url = "{value["url"]}" }}\n'
|
||||
|
||||
@@ -1 +1 @@
|
||||
__version__ = "3.1.3"
|
||||
__version__ = "3.1.4"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import argparse
|
||||
import contextlib
|
||||
import dataclasses
|
||||
import functools
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
@@ -24,7 +23,7 @@ from cibuildwheel.options import CommandLineArguments, Options, compute_options
|
||||
from cibuildwheel.platforms import ALL_PLATFORM_MODULES, get_build_identifiers, native_platform
|
||||
from cibuildwheel.selector import BuildSelector, EnableGroup, selector_matches
|
||||
from cibuildwheel.typing import PLATFORMS, PlatformName
|
||||
from cibuildwheel.util.file import CIBW_CACHE_PATH
|
||||
from cibuildwheel.util.file import CIBW_CACHE_PATH, ensure_cache_sentinel
|
||||
from cibuildwheel.util.helpers import strtobool
|
||||
from cibuildwheel.util.resources import read_all_configs
|
||||
|
||||
@@ -80,16 +79,14 @@ def main_inner(global_options: GlobalOptions) -> None:
|
||||
rather than exiting directly.
|
||||
"""
|
||||
|
||||
make_parser = functools.partial(argparse.ArgumentParser, allow_abbrev=False)
|
||||
if sys.version_info >= (3, 14):
|
||||
make_parser = functools.partial(make_parser, color=True, suggest_on_error=True)
|
||||
parser = make_parser(
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Build wheels for all the platforms.",
|
||||
epilog="""
|
||||
Most options are supplied via environment variables or in
|
||||
--config-file (pyproject.toml usually). See
|
||||
https://github.com/pypa/cibuildwheel#options for info.
|
||||
""",
|
||||
allow_abbrev=False,
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
@@ -182,6 +179,12 @@ def main_inner(global_options: GlobalOptions) -> None:
|
||||
help="Print the build identifiers matched by the current invocation and exit.",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--clean-cache",
|
||||
action="store_true",
|
||||
help="Clear the cibuildwheel cache and exit.",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--allow-empty",
|
||||
action="store_true",
|
||||
@@ -199,6 +202,48 @@ def main_inner(global_options: GlobalOptions) -> None:
|
||||
|
||||
global_options.print_traceback_on_error = args.debug_traceback
|
||||
|
||||
if args.clean_cache:
|
||||
if not CIBW_CACHE_PATH.exists():
|
||||
print(f"Cache directory does not exist: {CIBW_CACHE_PATH}")
|
||||
sys.exit(0)
|
||||
|
||||
sentinel_file = CIBW_CACHE_PATH / "CACHEDIR.TAG"
|
||||
if not sentinel_file.exists():
|
||||
print(
|
||||
f"Error: {CIBW_CACHE_PATH} does not appear to be a cibuildwheel cache directory.",
|
||||
"Only directories with a CACHEDIR.TAG sentinel file can be cleaned.",
|
||||
sep="\n",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
# Verify signature to ensure it's a proper cache dir
|
||||
# See https://bford.info/cachedir/ for more
|
||||
try:
|
||||
sentinel_content = sentinel_file.read_text(encoding="utf-8")
|
||||
except OSError as e:
|
||||
print(f"Error reading cache directory tag: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
if not sentinel_content.startswith("Signature: 8a477f597d28d172789f06886806bc55"):
|
||||
print(
|
||||
f"Error: {sentinel_file} does not contain a valid cache directory signature.",
|
||||
"For safety, only properly signed cache directories can be cleaned.",
|
||||
sep="\n",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
print(f"Clearing cache directory: {CIBW_CACHE_PATH}")
|
||||
try:
|
||||
shutil.rmtree(CIBW_CACHE_PATH)
|
||||
print("Cache cleared successfully.")
|
||||
except OSError as e:
|
||||
print(f"Error clearing cache: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
args.package_dir = args.package_dir.resolve()
|
||||
|
||||
# This are always relative to the base directory, even in SDist builds
|
||||
@@ -312,6 +357,7 @@ def build_in_directory(args: CommandLineArguments) -> None:
|
||||
|
||||
# create the cache dir before it gets printed & builds performed
|
||||
CIBW_CACHE_PATH.mkdir(parents=True, exist_ok=True)
|
||||
ensure_cache_sentinel(CIBW_CACHE_PATH)
|
||||
|
||||
print_preamble(platform=platform, options=options, identifiers=identifiers)
|
||||
|
||||
|
||||
@@ -36,6 +36,28 @@ class OCIPlatform(Enum):
|
||||
RISCV64 = "linux/riscv64"
|
||||
S390X = "linux/s390x"
|
||||
|
||||
@classmethod
|
||||
def native(cls) -> "OCIPlatform":
|
||||
"""Return the current OCI platform, or raise ValueError if unknown."""
|
||||
arch = platform.machine().lower()
|
||||
mapping = {
|
||||
"i386": cls.i386,
|
||||
"i686": cls.i386,
|
||||
"x86_64": cls.AMD64,
|
||||
"amd64": cls.AMD64,
|
||||
"armv7l": cls.ARMV7,
|
||||
"aarch64": cls.ARM64,
|
||||
"arm64": cls.ARM64,
|
||||
"ppc64le": cls.PPC64LE,
|
||||
"riscv64": cls.RISCV64,
|
||||
"s390x": cls.S390X,
|
||||
}
|
||||
try:
|
||||
return mapping[arch]
|
||||
except KeyError as ex:
|
||||
msg = f"Unsupported platform architecture: {arch}"
|
||||
raise OSError(msg) from ex
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class OCIContainerEngineConfig:
|
||||
@@ -152,11 +174,19 @@ class OCIContainer:
|
||||
back to cibuildwheel.
|
||||
|
||||
Example:
|
||||
>>> # xdoctest: +REQUIRES(LINUX)
|
||||
>>> from cibuildwheel.oci_container import * # NOQA
|
||||
>>> from cibuildwheel.options import _get_pinned_container_images
|
||||
>>> import pytest
|
||||
>>> try:
|
||||
... oci_platform = OCIPlatform.native()
|
||||
... except OSError as ex:
|
||||
... pytest.skip(str(ex))
|
||||
>>> if oci_platform != OCIPlatform.AMD64:
|
||||
... pytest.skip('only runs on amd64')
|
||||
>>> image = _get_pinned_container_images()['x86_64']['manylinux2014']
|
||||
>>> # Test the default container
|
||||
>>> with OCIContainer(image=image) as self:
|
||||
>>> with OCIContainer(image=image, oci_platform=oci_platform) as self:
|
||||
... self.call(["echo", "hello world"])
|
||||
... self.call(["cat", "/proc/1/cgroup"])
|
||||
... print(self.get_environment())
|
||||
|
||||
@@ -63,6 +63,7 @@ class CommandLineArguments:
|
||||
allow_empty: bool
|
||||
debug_traceback: bool
|
||||
enable: list[str]
|
||||
clean_cache: bool
|
||||
|
||||
@classmethod
|
||||
def defaults(cls) -> Self:
|
||||
@@ -77,6 +78,7 @@ class CommandLineArguments:
|
||||
print_build_identifiers=False,
|
||||
debug_traceback=False,
|
||||
enable=[],
|
||||
clean_cache=False,
|
||||
)
|
||||
|
||||
|
||||
@@ -391,6 +393,7 @@ class OptionsReader:
|
||||
by the platform.
|
||||
|
||||
Example:
|
||||
>>> # xdoctest: +SKIP
|
||||
>>> options_reader = OptionsReader(config_file, platform='macos')
|
||||
>>> options_reader.get('cool-color')
|
||||
|
||||
@@ -657,7 +660,9 @@ class Options:
|
||||
)
|
||||
requires_python = None if requires_python_str is None else SpecifierSet(requires_python_str)
|
||||
|
||||
archs_config_str = args.archs or self.reader.get("archs", option_format=ListFormat(sep=" "))
|
||||
archs_config_str = args.archs or self.reader.get(
|
||||
"archs", option_format=ListFormat(sep=" "), ignore_empty=True
|
||||
)
|
||||
architectures = Architecture.parse_config(archs_config_str, platform=self.platform)
|
||||
|
||||
# Process `--only`
|
||||
|
||||
@@ -278,7 +278,7 @@ def create_cmake_toolchain(
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
|
||||
"""
|
||||
),
|
||||
file=toolchain_file,
|
||||
|
||||
@@ -284,9 +284,8 @@ def setup_python(
|
||||
"pip",
|
||||
"install",
|
||||
"--upgrade",
|
||||
"auditwheel-emscripten",
|
||||
"build[virtualenv]",
|
||||
"pyodide-build",
|
||||
"build[virtualenv]",
|
||||
*constraint_flags(constraints_path),
|
||||
env=env,
|
||||
)
|
||||
|
||||
@@ -159,18 +159,18 @@ python_configurations = [
|
||||
{ identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.10/python-3.12.10-macos11.pkg" },
|
||||
{ identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.10/python-3.12.10-macos11.pkg" },
|
||||
{ identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.10/python-3.12.10-macos11.pkg" },
|
||||
{ identifier = "cp313-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.5/python-3.13.5-macos11.pkg" },
|
||||
{ identifier = "cp313-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.5/python-3.13.5-macos11.pkg" },
|
||||
{ identifier = "cp313-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.5/python-3.13.5-macos11.pkg" },
|
||||
{ identifier = "cp313t-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.5/python-3.13.5-macos11.pkg" },
|
||||
{ identifier = "cp313t-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.5/python-3.13.5-macos11.pkg" },
|
||||
{ identifier = "cp313t-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.5/python-3.13.5-macos11.pkg" },
|
||||
{ identifier = "cp314-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
|
||||
{ identifier = "cp314-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
|
||||
{ identifier = "cp314-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
|
||||
{ identifier = "cp314t-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
|
||||
{ identifier = "cp314t-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
|
||||
{ identifier = "cp314t-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc1-macos11.pkg" },
|
||||
{ identifier = "cp313-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.7/python-3.13.7-macos11.pkg" },
|
||||
{ identifier = "cp313-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.7/python-3.13.7-macos11.pkg" },
|
||||
{ identifier = "cp313-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.7/python-3.13.7-macos11.pkg" },
|
||||
{ identifier = "cp313t-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.7/python-3.13.7-macos11.pkg" },
|
||||
{ identifier = "cp313t-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.7/python-3.13.7-macos11.pkg" },
|
||||
{ identifier = "cp313t-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.7/python-3.13.7-macos11.pkg" },
|
||||
{ identifier = "cp314-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc2-macos11.pkg" },
|
||||
{ identifier = "cp314-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc2-macos11.pkg" },
|
||||
{ identifier = "cp314-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc2-macos11.pkg" },
|
||||
{ identifier = "cp314t-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc2-macos11.pkg" },
|
||||
{ identifier = "cp314t-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc2-macos11.pkg" },
|
||||
{ identifier = "cp314t-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.0/python-3.14.0rc2-macos11.pkg" },
|
||||
{ identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_x86_64.tar.bz2" },
|
||||
{ identifier = "pp38-macosx_arm64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_arm64.tar.bz2" },
|
||||
{ identifier = "pp39-macosx_x86_64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-macos_x86_64.tar.bz2" },
|
||||
@@ -195,22 +195,22 @@ python_configurations = [
|
||||
{ identifier = "cp311-win_amd64", version = "3.11.9", arch = "64" },
|
||||
{ identifier = "cp312-win32", version = "3.12.10", arch = "32" },
|
||||
{ identifier = "cp312-win_amd64", version = "3.12.10", arch = "64" },
|
||||
{ identifier = "cp313-win32", version = "3.13.5", arch = "32" },
|
||||
{ identifier = "cp313t-win32", version = "3.13.5", arch = "32" },
|
||||
{ identifier = "cp313-win_amd64", version = "3.13.5", arch = "64" },
|
||||
{ identifier = "cp313t-win_amd64", version = "3.13.5", arch = "64" },
|
||||
{ identifier = "cp314-win32", version = "3.14.0-rc1", arch = "32" },
|
||||
{ identifier = "cp314t-win32", version = "3.14.0-rc1", arch = "32" },
|
||||
{ identifier = "cp314-win_amd64", version = "3.14.0-rc1", arch = "64" },
|
||||
{ identifier = "cp314t-win_amd64", version = "3.14.0-rc1", arch = "64" },
|
||||
{ identifier = "cp313-win32", version = "3.13.7", arch = "32" },
|
||||
{ identifier = "cp313t-win32", version = "3.13.7", arch = "32" },
|
||||
{ identifier = "cp313-win_amd64", version = "3.13.7", arch = "64" },
|
||||
{ identifier = "cp313t-win_amd64", version = "3.13.7", arch = "64" },
|
||||
{ identifier = "cp314-win32", version = "3.14.0-rc2", arch = "32" },
|
||||
{ identifier = "cp314t-win32", version = "3.14.0-rc2", arch = "32" },
|
||||
{ identifier = "cp314-win_amd64", version = "3.14.0-rc2", arch = "64" },
|
||||
{ identifier = "cp314t-win_amd64", version = "3.14.0-rc2", arch = "64" },
|
||||
{ identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" },
|
||||
{ identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" },
|
||||
{ identifier = "cp311-win_arm64", version = "3.11.9", arch = "ARM64" },
|
||||
{ identifier = "cp312-win_arm64", version = "3.12.10", arch = "ARM64" },
|
||||
{ identifier = "cp313-win_arm64", version = "3.13.5", arch = "ARM64" },
|
||||
{ identifier = "cp313t-win_arm64", version = "3.13.5", arch = "ARM64" },
|
||||
{ identifier = "cp314-win_arm64", version = "3.14.0-rc1", arch = "ARM64" },
|
||||
{ identifier = "cp314t-win_arm64", version = "3.14.0-rc1", arch = "ARM64" },
|
||||
{ identifier = "cp313-win_arm64", version = "3.13.7", arch = "ARM64" },
|
||||
{ identifier = "cp313t-win_arm64", version = "3.13.7", arch = "ARM64" },
|
||||
{ identifier = "cp314-win_arm64", version = "3.14.0-rc2", arch = "ARM64" },
|
||||
{ identifier = "cp314t-win_arm64", version = "3.14.0-rc2", arch = "ARM64" },
|
||||
{ identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" },
|
||||
{ identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-win64.zip" },
|
||||
{ identifier = "pp310-win_amd64", version = "3.10", arch = "64", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.19-win64.zip" },
|
||||
@@ -221,7 +221,7 @@ python_configurations = [
|
||||
[pyodide]
|
||||
python_configurations = [
|
||||
{ identifier = "cp312-pyodide_wasm32", version = "3.12", default_pyodide_version = "0.27.7", node_version = "v22" },
|
||||
{ identifier = "cp313-pyodide_wasm32", version = "3.13", default_pyodide_version = "0.28.0", node_version = "v22" },
|
||||
{ identifier = "cp313-pyodide_wasm32", version = "3.13", default_pyodide_version = "0.28.2", node_version = "v22" },
|
||||
]
|
||||
|
||||
[android]
|
||||
|
||||
@@ -2,20 +2,20 @@
|
||||
# nox -s update_constraints
|
||||
annotated-types==0.7.0
|
||||
# via pydantic
|
||||
anyio==4.9.0
|
||||
anyio==4.10.0
|
||||
# via httpx
|
||||
auditwheel-emscripten==0.1.0
|
||||
auditwheel-emscripten==0.2.0
|
||||
# via pyodide-build
|
||||
build==1.2.2.post1
|
||||
# via
|
||||
# -r .nox/update_constraints/tmp/constraints-pyodide.in
|
||||
# pyodide-build
|
||||
certifi==2025.7.14
|
||||
certifi==2025.8.3
|
||||
# via
|
||||
# httpcore
|
||||
# httpx
|
||||
# requests
|
||||
charset-normalizer==3.4.2
|
||||
charset-normalizer==3.4.3
|
||||
# via requests
|
||||
click==8.1.8
|
||||
# via
|
||||
@@ -23,7 +23,7 @@ click==8.1.8
|
||||
# typer
|
||||
distlib==0.4.0
|
||||
# via virtualenv
|
||||
filelock==3.18.0
|
||||
filelock==3.19.1
|
||||
# via virtualenv
|
||||
h11==0.16.0
|
||||
# via httpcore
|
||||
@@ -38,7 +38,7 @@ idna==3.10
|
||||
# requests
|
||||
leb128==1.0.8
|
||||
# via auditwheel-emscripten
|
||||
markdown-it-py==3.0.0
|
||||
markdown-it-py==4.0.0
|
||||
# via rich
|
||||
mdurl==0.1.2
|
||||
# via markdown-it-py
|
||||
@@ -48,7 +48,7 @@ packaging==25.0
|
||||
# build
|
||||
# pyodide-build
|
||||
# unearth
|
||||
pip==25.1.1
|
||||
pip==25.2
|
||||
# via -r .nox/update_constraints/tmp/constraints-pyodide.in
|
||||
platformdirs==4.3.8
|
||||
# via
|
||||
@@ -62,13 +62,13 @@ pydantic-core==2.33.2
|
||||
# via pydantic
|
||||
pygments==2.19.2
|
||||
# via rich
|
||||
pyodide-build==0.30.5
|
||||
pyodide-build==0.30.7
|
||||
# via -r .nox/update_constraints/tmp/constraints-pyodide.in
|
||||
pyodide-cli==0.3.0
|
||||
# via
|
||||
# auditwheel-emscripten
|
||||
# pyodide-build
|
||||
pyodide-lock==0.1.0a7
|
||||
pyodide-lock==0.1.0
|
||||
# via pyodide-build
|
||||
pyproject-hooks==1.2.0
|
||||
# via build
|
||||
@@ -107,7 +107,7 @@ unearth==0.17.5
|
||||
# via pyodide-build
|
||||
urllib3==2.5.0
|
||||
# via requests
|
||||
virtualenv==20.32.0
|
||||
virtualenv==20.34.0
|
||||
# via
|
||||
# build
|
||||
# pyodide-build
|
||||
|
||||
@@ -2,20 +2,20 @@
|
||||
# nox -s update_constraints
|
||||
annotated-types==0.7.0
|
||||
# via pydantic
|
||||
anyio==4.9.0
|
||||
anyio==4.10.0
|
||||
# via httpx
|
||||
auditwheel-emscripten==0.1.0
|
||||
auditwheel-emscripten==0.2.0
|
||||
# via pyodide-build
|
||||
build==1.2.2.post1
|
||||
# via
|
||||
# -r .nox/update_constraints/tmp/constraints-pyodide.in
|
||||
# pyodide-build
|
||||
certifi==2025.7.14
|
||||
certifi==2025.8.3
|
||||
# via
|
||||
# httpcore
|
||||
# httpx
|
||||
# requests
|
||||
charset-normalizer==3.4.2
|
||||
charset-normalizer==3.4.3
|
||||
# via requests
|
||||
click==8.1.8
|
||||
# via
|
||||
@@ -23,7 +23,7 @@ click==8.1.8
|
||||
# typer
|
||||
distlib==0.4.0
|
||||
# via virtualenv
|
||||
filelock==3.18.0
|
||||
filelock==3.19.1
|
||||
# via virtualenv
|
||||
h11==0.16.0
|
||||
# via httpcore
|
||||
@@ -38,7 +38,7 @@ idna==3.10
|
||||
# requests
|
||||
leb128==1.0.8
|
||||
# via auditwheel-emscripten
|
||||
markdown-it-py==3.0.0
|
||||
markdown-it-py==4.0.0
|
||||
# via rich
|
||||
mdurl==0.1.2
|
||||
# via markdown-it-py
|
||||
@@ -48,7 +48,7 @@ packaging==25.0
|
||||
# build
|
||||
# pyodide-build
|
||||
# unearth
|
||||
pip==25.1.1
|
||||
pip==25.2
|
||||
# via -r .nox/update_constraints/tmp/constraints-pyodide.in
|
||||
platformdirs==4.3.8
|
||||
# via
|
||||
@@ -62,13 +62,13 @@ pydantic-core==2.33.2
|
||||
# via pydantic
|
||||
pygments==2.19.2
|
||||
# via rich
|
||||
pyodide-build==0.30.5
|
||||
pyodide-build==0.30.7
|
||||
# via -r .nox/update_constraints/tmp/constraints-pyodide.in
|
||||
pyodide-cli==0.3.0
|
||||
# via
|
||||
# auditwheel-emscripten
|
||||
# pyodide-build
|
||||
pyodide-lock==0.1.0a7
|
||||
pyodide-lock==0.1.0
|
||||
# via pyodide-build
|
||||
pyproject-hooks==1.2.0
|
||||
# via build
|
||||
@@ -106,7 +106,7 @@ unearth==0.17.5
|
||||
# via pyodide-build
|
||||
urllib3==2.5.0
|
||||
# via requests
|
||||
virtualenv==20.32.0
|
||||
virtualenv==20.34.0
|
||||
# via
|
||||
# build
|
||||
# pyodide-build
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
# nox -s update_constraints
|
||||
altgraph==0.17.4
|
||||
# via macholib
|
||||
build==1.2.2.post1
|
||||
build==1.3.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.13.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.4.0
|
||||
# via virtualenv
|
||||
filelock==3.18.0
|
||||
filelock==3.19.1
|
||||
# via virtualenv
|
||||
importlib-metadata==8.7.0
|
||||
# via build
|
||||
@@ -18,7 +18,7 @@ packaging==25.0
|
||||
# via
|
||||
# build
|
||||
# delocate
|
||||
pip==25.1.1
|
||||
pip==25.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.3.8
|
||||
# via virtualenv
|
||||
@@ -27,8 +27,10 @@ pyproject-hooks==1.2.0
|
||||
tomli==2.2.1
|
||||
# via build
|
||||
typing-extensions==4.14.1
|
||||
# via delocate
|
||||
virtualenv==20.32.0
|
||||
# via
|
||||
# delocate
|
||||
# virtualenv
|
||||
virtualenv==20.34.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
zipp==3.23.0
|
||||
# via importlib-metadata
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
# nox -s update_constraints
|
||||
altgraph==0.17.4
|
||||
# via macholib
|
||||
build==1.2.2.post1
|
||||
build==1.3.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.13.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.4.0
|
||||
# via virtualenv
|
||||
filelock==3.18.0
|
||||
filelock==3.19.1
|
||||
# via virtualenv
|
||||
macholib==1.16.3
|
||||
# via delocate
|
||||
@@ -16,7 +16,7 @@ packaging==25.0
|
||||
# via
|
||||
# build
|
||||
# delocate
|
||||
pip==25.1.1
|
||||
pip==25.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.3.8
|
||||
# via virtualenv
|
||||
@@ -24,5 +24,5 @@ pyproject-hooks==1.2.0
|
||||
# via build
|
||||
typing-extensions==4.14.1
|
||||
# via delocate
|
||||
virtualenv==20.32.0
|
||||
virtualenv==20.34.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
# nox -s update_constraints
|
||||
altgraph==0.17.4
|
||||
# via macholib
|
||||
build==1.2.2.post1
|
||||
build==1.3.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.13.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.4.0
|
||||
# via virtualenv
|
||||
filelock==3.18.0
|
||||
filelock==3.19.1
|
||||
# via virtualenv
|
||||
macholib==1.16.3
|
||||
# via delocate
|
||||
@@ -16,7 +16,7 @@ packaging==25.0
|
||||
# via
|
||||
# build
|
||||
# delocate
|
||||
pip==25.1.1
|
||||
pip==25.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.3.8
|
||||
# via virtualenv
|
||||
@@ -24,5 +24,5 @@ pyproject-hooks==1.2.0
|
||||
# via build
|
||||
typing-extensions==4.14.1
|
||||
# via delocate
|
||||
virtualenv==20.32.0
|
||||
virtualenv==20.34.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
# nox -s update_constraints
|
||||
altgraph==0.17.4
|
||||
# via macholib
|
||||
build==1.2.2.post1
|
||||
build==1.3.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.13.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.4.0
|
||||
# via virtualenv
|
||||
filelock==3.18.0
|
||||
filelock==3.19.1
|
||||
# via virtualenv
|
||||
macholib==1.16.3
|
||||
# via delocate
|
||||
@@ -16,7 +16,7 @@ packaging==25.0
|
||||
# via
|
||||
# build
|
||||
# delocate
|
||||
pip==25.1.1
|
||||
pip==25.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.3.8
|
||||
# via virtualenv
|
||||
@@ -24,5 +24,5 @@ pyproject-hooks==1.2.0
|
||||
# via build
|
||||
typing-extensions==4.14.1
|
||||
# via delocate
|
||||
virtualenv==20.32.0
|
||||
virtualenv==20.34.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
# nox -s update_constraints
|
||||
altgraph==0.17.4
|
||||
# via macholib
|
||||
build==1.2.2.post1
|
||||
build==1.3.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.13.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.4.0
|
||||
# via virtualenv
|
||||
filelock==3.18.0
|
||||
filelock==3.19.1
|
||||
# via virtualenv
|
||||
macholib==1.16.3
|
||||
# via delocate
|
||||
@@ -16,7 +16,7 @@ packaging==25.0
|
||||
# via
|
||||
# build
|
||||
# delocate
|
||||
pip==25.1.1
|
||||
pip==25.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.3.8
|
||||
# via virtualenv
|
||||
@@ -24,5 +24,5 @@ pyproject-hooks==1.2.0
|
||||
# via build
|
||||
typing-extensions==4.14.1
|
||||
# via delocate
|
||||
virtualenv==20.32.0
|
||||
virtualenv==20.34.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -27,8 +27,10 @@ pyproject-hooks==1.2.0
|
||||
tomli==2.2.1
|
||||
# via build
|
||||
typing-extensions==4.13.2
|
||||
# via delocate
|
||||
virtualenv==20.32.0
|
||||
# via
|
||||
# delocate
|
||||
# virtualenv
|
||||
virtualenv==20.34.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
zipp==3.20.2
|
||||
# via importlib-metadata
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
# nox -s update_constraints
|
||||
altgraph==0.17.4
|
||||
# via macholib
|
||||
build==1.2.2.post1
|
||||
build==1.3.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.13.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.4.0
|
||||
# via virtualenv
|
||||
filelock==3.18.0
|
||||
filelock==3.19.1
|
||||
# via virtualenv
|
||||
importlib-metadata==8.7.0
|
||||
# via build
|
||||
@@ -18,7 +18,7 @@ packaging==25.0
|
||||
# via
|
||||
# build
|
||||
# delocate
|
||||
pip==25.1.1
|
||||
pip==25.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.3.8
|
||||
# via virtualenv
|
||||
@@ -27,8 +27,10 @@ pyproject-hooks==1.2.0
|
||||
tomli==2.2.1
|
||||
# via build
|
||||
typing-extensions==4.14.1
|
||||
# via delocate
|
||||
virtualenv==20.32.0
|
||||
# via
|
||||
# delocate
|
||||
# virtualenv
|
||||
virtualenv==20.34.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
zipp==3.23.0
|
||||
# via importlib-metadata
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
# nox -s update_constraints
|
||||
altgraph==0.17.4
|
||||
# via macholib
|
||||
build==1.2.2.post1
|
||||
build==1.3.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
delocate==0.13.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
distlib==0.4.0
|
||||
# via virtualenv
|
||||
filelock==3.18.0
|
||||
filelock==3.19.1
|
||||
# via virtualenv
|
||||
macholib==1.16.3
|
||||
# via delocate
|
||||
@@ -16,7 +16,7 @@ packaging==25.0
|
||||
# via
|
||||
# build
|
||||
# delocate
|
||||
pip==25.1.1
|
||||
pip==25.2
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
platformdirs==4.3.8
|
||||
# via virtualenv
|
||||
@@ -24,5 +24,5 @@ pyproject-hooks==1.2.0
|
||||
# via build
|
||||
typing-extensions==4.14.1
|
||||
# via delocate
|
||||
virtualenv==20.32.0
|
||||
virtualenv==20.34.0
|
||||
# via -r cibuildwheel/resources/constraints.in
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
url = "https://nodejs.org/dist/"
|
||||
v22 = "v22.17.1"
|
||||
v22 = "v22.18.0"
|
||||
v20 = "v20.19.4"
|
||||
|
||||
@@ -1,53 +1,53 @@
|
||||
[x86_64]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.07.27-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.27-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2025.07.27-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.08.15-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.08.15-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.08.15-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64:2025.08.15-1
|
||||
|
||||
[i686]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.07.27-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.27-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2025.07.27-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.08.15-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2025.08.15-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2025.08.15-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686:2025.08.15-1
|
||||
|
||||
[aarch64]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.07.27-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.27-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2025.07.27-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.08.15-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.08.15-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.08.15-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64:2025.08.15-1
|
||||
|
||||
[ppc64le]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2025.07.27-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.27-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2025.07.27-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le:2025.08.15-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le:2025.08.15-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_ppc64le:2025.08.15-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le:2025.08.15-1
|
||||
|
||||
[s390x]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2025.07.27-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.27-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2025.07.27-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_s390x:2025.08.15-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x:2025.08.15-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_s390x:2025.08.15-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x:2025.08.15-1
|
||||
|
||||
[pypy_x86_64]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.07.27-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.27-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_x86_64:2025.08.15-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64:2025.08.15-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64:2025.08.15-1
|
||||
|
||||
[pypy_i686]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.07.27-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.27-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_i686:2025.08.15-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686:2025.08.15-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686:2025.08.15-1
|
||||
|
||||
[pypy_aarch64]
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.07.27-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.27-1
|
||||
manylinux2014 = quay.io/pypa/manylinux2014_aarch64:2025.08.15-1
|
||||
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64:2025.08.15-1
|
||||
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64:2025.08.15-1
|
||||
|
||||
[armv7l]
|
||||
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.27-1
|
||||
manylinux_2_31 = quay.io/pypa/manylinux_2_31_armv7l:2025.08.15-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l:2025.08.15-1
|
||||
|
||||
[riscv64]
|
||||
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.27-1
|
||||
manylinux_2_39 = quay.io/pypa/manylinux_2_39_riscv64:2025.08.15-1
|
||||
musllinux_1_2 = quay.io/pypa/musllinux_1_2_riscv64:2025.08.15-1
|
||||
|
||||
|
||||
@@ -1,455 +1,455 @@
|
||||
{
|
||||
"releases": [
|
||||
{
|
||||
"tag": "20250723",
|
||||
"tag": "20250814",
|
||||
"assets": [
|
||||
{
|
||||
"name": "cpython-3.10.18+20250723-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+20250814-aarch64-apple-darwin-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-aarch64-apple-darwin-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/20250723/cpython-3.10.18%2B20250723-aarch64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-aarch64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-aarch64-unknown-linux-gnu-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/20250723/cpython-3.10.18%2B20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-armv7-unknown-linux-gnueabi-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-armv7-unknown-linux-gnueabi-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/20250723/cpython-3.10.18%2B20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-armv7-unknown-linux-gnueabihf-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-armv7-unknown-linux-gnueabihf-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/20250723/cpython-3.10.18%2B20250723-i686-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-i686-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-i686-pc-windows-msvc-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/20250723/cpython-3.10.18%2B20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-ppc64le-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-ppc64le-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/20250723/cpython-3.10.18%2B20250723-riscv64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-riscv64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-riscv64-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/20250723/cpython-3.10.18%2B20250723-s390x-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-s390x-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-s390x-unknown-linux-gnu-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/20250723/cpython-3.10.18%2B20250723-x86_64-apple-darwin-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-x86_64-apple-darwin-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-x86_64-apple-darwin-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/20250723/cpython-3.10.18%2B20250723-x86_64-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-x86_64-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-x86_64-pc-windows-msvc-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/20250723/cpython-3.10.18%2B20250723-x86_64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-x86_64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-x86_64-unknown-linux-gnu-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/20250723/cpython-3.10.18%2B20250723-x86_64-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-x86_64-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-x86_64-unknown-linux-musl-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/20250723/cpython-3.10.18%2B20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-x86_64_v2-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-x86_64_v2-unknown-linux-gnu-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/20250723/cpython-3.10.18%2B20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-x86_64_v2-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-x86_64_v2-unknown-linux-musl-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/20250723/cpython-3.10.18%2B20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-x86_64_v3-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-x86_64_v3-unknown-linux-gnu-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/20250723/cpython-3.10.18%2B20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-x86_64_v3-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-x86_64_v3-unknown-linux-musl-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/20250723/cpython-3.10.18%2B20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-x86_64_v4-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-x86_64_v4-unknown-linux-gnu-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/20250723/cpython-3.10.18%2B20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.10.18+20250814-x86_64_v4-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.10.18%2B20250814-x86_64_v4-unknown-linux-musl-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/20250723/cpython-3.11.13%2B20250723-aarch64-apple-darwin-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-aarch64-apple-darwin-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-aarch64-apple-darwin-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/20250723/cpython-3.11.13%2B20250723-aarch64-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-aarch64-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-aarch64-pc-windows-msvc-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/20250723/cpython-3.11.13%2B20250723-aarch64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-aarch64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-aarch64-unknown-linux-gnu-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/20250723/cpython-3.11.13%2B20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-armv7-unknown-linux-gnueabi-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-armv7-unknown-linux-gnueabi-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/20250723/cpython-3.11.13%2B20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-armv7-unknown-linux-gnueabihf-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-armv7-unknown-linux-gnueabihf-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/20250723/cpython-3.11.13%2B20250723-i686-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-i686-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-i686-pc-windows-msvc-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/20250723/cpython-3.11.13%2B20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-ppc64le-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-ppc64le-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/20250723/cpython-3.11.13%2B20250723-riscv64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-riscv64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-riscv64-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/20250723/cpython-3.11.13%2B20250723-s390x-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-s390x-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-s390x-unknown-linux-gnu-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/20250723/cpython-3.11.13%2B20250723-x86_64-apple-darwin-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-x86_64-apple-darwin-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-x86_64-apple-darwin-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/20250723/cpython-3.11.13%2B20250723-x86_64-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-x86_64-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-x86_64-pc-windows-msvc-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/20250723/cpython-3.11.13%2B20250723-x86_64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-x86_64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-x86_64-unknown-linux-gnu-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/20250723/cpython-3.11.13%2B20250723-x86_64-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-x86_64-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-x86_64-unknown-linux-musl-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/20250723/cpython-3.11.13%2B20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-x86_64_v2-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-x86_64_v2-unknown-linux-gnu-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/20250723/cpython-3.11.13%2B20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-x86_64_v2-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-x86_64_v2-unknown-linux-musl-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/20250723/cpython-3.11.13%2B20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-x86_64_v3-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-x86_64_v3-unknown-linux-gnu-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/20250723/cpython-3.11.13%2B20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-x86_64_v3-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-x86_64_v3-unknown-linux-musl-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/20250723/cpython-3.11.13%2B20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-x86_64_v4-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-x86_64_v4-unknown-linux-gnu-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/20250723/cpython-3.11.13%2B20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.11.13+20250814-x86_64_v4-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.11.13%2B20250814-x86_64_v4-unknown-linux-musl-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/20250723/cpython-3.12.11%2B20250723-aarch64-apple-darwin-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-aarch64-apple-darwin-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-aarch64-apple-darwin-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/20250723/cpython-3.12.11%2B20250723-aarch64-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-aarch64-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-aarch64-pc-windows-msvc-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/20250723/cpython-3.12.11%2B20250723-aarch64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-aarch64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-aarch64-unknown-linux-gnu-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/20250723/cpython-3.12.11%2B20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-armv7-unknown-linux-gnueabi-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-armv7-unknown-linux-gnueabi-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/20250723/cpython-3.12.11%2B20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-armv7-unknown-linux-gnueabihf-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-armv7-unknown-linux-gnueabihf-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/20250723/cpython-3.12.11%2B20250723-i686-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-i686-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-i686-pc-windows-msvc-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/20250723/cpython-3.12.11%2B20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-ppc64le-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-ppc64le-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/20250723/cpython-3.12.11%2B20250723-riscv64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-riscv64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-riscv64-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/20250723/cpython-3.12.11%2B20250723-s390x-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-s390x-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-s390x-unknown-linux-gnu-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/20250723/cpython-3.12.11%2B20250723-x86_64-apple-darwin-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-x86_64-apple-darwin-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-x86_64-apple-darwin-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/20250723/cpython-3.12.11%2B20250723-x86_64-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-x86_64-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-x86_64-pc-windows-msvc-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/20250723/cpython-3.12.11%2B20250723-x86_64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-x86_64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-x86_64-unknown-linux-gnu-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/20250723/cpython-3.12.11%2B20250723-x86_64-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-x86_64-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-x86_64-unknown-linux-musl-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/20250723/cpython-3.12.11%2B20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-x86_64_v2-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-x86_64_v2-unknown-linux-gnu-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/20250723/cpython-3.12.11%2B20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-x86_64_v2-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-x86_64_v2-unknown-linux-musl-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/20250723/cpython-3.12.11%2B20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-x86_64_v3-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-x86_64_v3-unknown-linux-gnu-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/20250723/cpython-3.12.11%2B20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-x86_64_v3-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-x86_64_v3-unknown-linux-musl-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/20250723/cpython-3.12.11%2B20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-x86_64_v4-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-x86_64_v4-unknown-linux-gnu-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/20250723/cpython-3.12.11%2B20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.12.11+20250814-x86_64_v4-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.12.11%2B20250814-x86_64_v4-unknown-linux-musl-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/20250723/cpython-3.13.5%2B20250723-aarch64-apple-darwin-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-aarch64-apple-darwin-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-aarch64-apple-darwin-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/20250723/cpython-3.13.5%2B20250723-aarch64-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-aarch64-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-aarch64-pc-windows-msvc-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/20250723/cpython-3.13.5%2B20250723-aarch64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-aarch64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-aarch64-unknown-linux-gnu-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/20250723/cpython-3.13.5%2B20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-armv7-unknown-linux-gnueabi-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-armv7-unknown-linux-gnueabi-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/20250723/cpython-3.13.5%2B20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-armv7-unknown-linux-gnueabihf-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-armv7-unknown-linux-gnueabihf-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/20250723/cpython-3.13.5%2B20250723-i686-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-i686-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-i686-pc-windows-msvc-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/20250723/cpython-3.13.5%2B20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-ppc64le-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-ppc64le-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/20250723/cpython-3.13.5%2B20250723-riscv64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-riscv64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-riscv64-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/20250723/cpython-3.13.5%2B20250723-s390x-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-s390x-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-s390x-unknown-linux-gnu-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/20250723/cpython-3.13.5%2B20250723-x86_64-apple-darwin-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-x86_64-apple-darwin-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-x86_64-apple-darwin-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/20250723/cpython-3.13.5%2B20250723-x86_64-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-x86_64-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-x86_64-pc-windows-msvc-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/20250723/cpython-3.13.5%2B20250723-x86_64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-x86_64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-x86_64-unknown-linux-gnu-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/20250723/cpython-3.13.5%2B20250723-x86_64-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-x86_64-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-x86_64-unknown-linux-musl-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/20250723/cpython-3.13.5%2B20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-x86_64_v2-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-x86_64_v2-unknown-linux-gnu-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/20250723/cpython-3.13.5%2B20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-x86_64_v2-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-x86_64_v2-unknown-linux-musl-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/20250723/cpython-3.13.5%2B20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-x86_64_v3-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-x86_64_v3-unknown-linux-gnu-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/20250723/cpython-3.13.5%2B20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-x86_64_v3-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-x86_64_v3-unknown-linux-musl-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/20250723/cpython-3.13.5%2B20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-x86_64_v4-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-x86_64_v4-unknown-linux-gnu-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/20250723/cpython-3.13.5%2B20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.13.6+20250814-x86_64_v4-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.13.6%2B20250814-x86_64_v4-unknown-linux-musl-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/20250723/cpython-3.14.0rc1%2B20250723-aarch64-apple-darwin-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-aarch64-apple-darwin-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-aarch64-apple-darwin-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/20250723/cpython-3.14.0rc1%2B20250723-aarch64-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-aarch64-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-aarch64-pc-windows-msvc-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/20250723/cpython-3.14.0rc1%2B20250723-aarch64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-aarch64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-aarch64-unknown-linux-gnu-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/20250723/cpython-3.14.0rc1%2B20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-armv7-unknown-linux-gnueabi-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-armv7-unknown-linux-gnueabi-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/20250723/cpython-3.14.0rc1%2B20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-armv7-unknown-linux-gnueabihf-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-armv7-unknown-linux-gnueabihf-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/20250723/cpython-3.14.0rc1%2B20250723-i686-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-i686-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-i686-pc-windows-msvc-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/20250723/cpython-3.14.0rc1%2B20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-ppc64le-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-ppc64le-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/20250723/cpython-3.14.0rc1%2B20250723-riscv64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-riscv64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-riscv64-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/20250723/cpython-3.14.0rc1%2B20250723-s390x-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-s390x-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-s390x-unknown-linux-gnu-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/20250723/cpython-3.14.0rc1%2B20250723-x86_64-apple-darwin-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-x86_64-apple-darwin-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-x86_64-apple-darwin-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/20250723/cpython-3.14.0rc1%2B20250723-x86_64-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-x86_64-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-x86_64-pc-windows-msvc-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/20250723/cpython-3.14.0rc1%2B20250723-x86_64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-x86_64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-x86_64-unknown-linux-gnu-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/20250723/cpython-3.14.0rc1%2B20250723-x86_64-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-x86_64-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-x86_64-unknown-linux-musl-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/20250723/cpython-3.14.0rc1%2B20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-x86_64_v2-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-x86_64_v2-unknown-linux-gnu-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/20250723/cpython-3.14.0rc1%2B20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-x86_64_v2-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-x86_64_v2-unknown-linux-musl-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/20250723/cpython-3.14.0rc1%2B20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-x86_64_v3-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-x86_64_v3-unknown-linux-gnu-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/20250723/cpython-3.14.0rc1%2B20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-x86_64_v3-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-x86_64_v3-unknown-linux-musl-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/20250723/cpython-3.14.0rc1%2B20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-x86_64_v4-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-x86_64_v4-unknown-linux-gnu-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/20250723/cpython-3.14.0rc1%2B20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.14.0rc2+20250814-x86_64_v4-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.14.0rc2%2B20250814-x86_64_v4-unknown-linux-musl-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/20250723/cpython-3.9.23%2B20250723-aarch64-apple-darwin-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-aarch64-apple-darwin-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-aarch64-apple-darwin-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/20250723/cpython-3.9.23%2B20250723-aarch64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-aarch64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-aarch64-unknown-linux-gnu-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/20250723/cpython-3.9.23%2B20250723-armv7-unknown-linux-gnueabi-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-armv7-unknown-linux-gnueabi-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-armv7-unknown-linux-gnueabi-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/20250723/cpython-3.9.23%2B20250723-armv7-unknown-linux-gnueabihf-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-armv7-unknown-linux-gnueabihf-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-armv7-unknown-linux-gnueabihf-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/20250723/cpython-3.9.23%2B20250723-i686-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-i686-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-i686-pc-windows-msvc-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/20250723/cpython-3.9.23%2B20250723-ppc64le-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-ppc64le-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-ppc64le-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/20250723/cpython-3.9.23%2B20250723-riscv64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-riscv64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-riscv64-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/20250723/cpython-3.9.23%2B20250723-s390x-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-s390x-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-s390x-unknown-linux-gnu-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/20250723/cpython-3.9.23%2B20250723-x86_64-apple-darwin-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-x86_64-apple-darwin-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-x86_64-apple-darwin-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/20250723/cpython-3.9.23%2B20250723-x86_64-pc-windows-msvc-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-x86_64-pc-windows-msvc-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-x86_64-pc-windows-msvc-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/20250723/cpython-3.9.23%2B20250723-x86_64-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-x86_64-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-x86_64-unknown-linux-gnu-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/20250723/cpython-3.9.23%2B20250723-x86_64-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-x86_64-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-x86_64-unknown-linux-musl-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/20250723/cpython-3.9.23%2B20250723-x86_64_v2-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-x86_64_v2-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-x86_64_v2-unknown-linux-gnu-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/20250723/cpython-3.9.23%2B20250723-x86_64_v2-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-x86_64_v2-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-x86_64_v2-unknown-linux-musl-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/20250723/cpython-3.9.23%2B20250723-x86_64_v3-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-x86_64_v3-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-x86_64_v3-unknown-linux-gnu-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/20250723/cpython-3.9.23%2B20250723-x86_64_v3-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-x86_64_v3-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-x86_64_v3-unknown-linux-musl-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/20250723/cpython-3.9.23%2B20250723-x86_64_v4-unknown-linux-gnu-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-x86_64_v4-unknown-linux-gnu-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-x86_64_v4-unknown-linux-gnu-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/20250723/cpython-3.9.23%2B20250723-x86_64_v4-unknown-linux-musl-install_only.tar.gz"
|
||||
"name": "cpython-3.9.23+20250814-x86_64_v4-unknown-linux-musl-install_only.tar.gz",
|
||||
"url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250814/cpython-3.9.23%2B20250814-x86_64_v4-unknown-linux-musl-install_only.tar.gz"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
default = { version = "20.32.0", url = "https://github.com/pypa/get-virtualenv/blob/20.32.0/public/virtualenv.pyz?raw=true" }
|
||||
default = { version = "20.34.0", url = "https://github.com/pypa/get-virtualenv/releases/download/20.34.0/virtualenv.pyz" }
|
||||
|
||||
@@ -20,6 +20,26 @@ CIBW_CACHE_PATH: Final[Path] = Path(
|
||||
).resolve()
|
||||
|
||||
|
||||
def ensure_cache_sentinel(cache_path: Path) -> None:
|
||||
"""Create a sentinel file to mark a cibuildwheel cache directory.
|
||||
|
||||
We help prevent accidental deletion of non-cache directories with this.
|
||||
|
||||
Args:
|
||||
cache_path: The cache directory path where the sentinel should be created
|
||||
"""
|
||||
if cache_path.exists():
|
||||
sentinel_file = cache_path / "CACHEDIR.TAG"
|
||||
if not sentinel_file.exists():
|
||||
sentinel_file.write_text(
|
||||
"Signature: 8a477f597d28d172789f06886806bc55\n"
|
||||
"# This file is a cache directory tag created by cibuildwheel.\n"
|
||||
"# For information about cache directory tags, see:\n"
|
||||
"# https://www.brynosaurus.com/cachedir/",
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
|
||||
def download(url: str, dest: Path) -> None:
|
||||
print(f"+ Download {url} to {dest}")
|
||||
dest_dir = dest.parent
|
||||
|
||||
@@ -20,8 +20,8 @@ def format_safe(template: str, **kwargs: str | os.PathLike[str]) -> str:
|
||||
>>> format_safe('{a} {b[4]:3f}', a='123')
|
||||
'123 {b[4]:3f}'
|
||||
|
||||
To avoid variable expansion, precede with a single backslash e.g.
|
||||
>>> format_safe('\\{a} {b}', a='123')
|
||||
To avoid variable expansion, precede with a single hash e.g.
|
||||
>>> format_safe('#{a} {b}', a='123')
|
||||
'{a} {b}'
|
||||
"""
|
||||
|
||||
|
||||
+22
-4
@@ -4,14 +4,32 @@ title: Changelog
|
||||
|
||||
# Changelog
|
||||
|
||||
### v3.1.4
|
||||
|
||||
_19 August 2025_
|
||||
|
||||
- ✨ Add a `--clean-cache` command to clean up our cache (#2489)
|
||||
- 🛠 Update Python to 3.14rc2 and other patch version bumps (#2542, #2556)
|
||||
- 🛠 Update Pyodide to 0.28.2 (#2562, #2558)
|
||||
- 🐛 Fix resolution with `pyodide-build` when `dependency-versions` is set (#2548)
|
||||
- 🐛 Set `CMAKE_FIND_ROOT_PATH_MODE_PACKAGE` to `BOTH` on Android (#2547)
|
||||
- 🐛 Add `patchelf` dependency for platforms that can build Android wheels (#2552)
|
||||
- 🐛 Ignore empty values for `CIBW_ARCHS` like most other environment variables (#2541)
|
||||
- 💼 The `color` and `suggest_on_error` argparse options are now default in 3.14rc1+ (#2554)
|
||||
- 💼 Use the virtualenv release URL instead of blob URL (should be more robust) (#2555)
|
||||
- 🧪 For iOS, lowering to macos-14 is needed for now due to issues with GitHub's runner images (#2557)
|
||||
- 🧪 Split out platforms iOS and Android in our tests (#2519)
|
||||
- 🧪 Fix and enable doctests (#2546)
|
||||
- 📚 Improve our docs on free-threading (#2549)
|
||||
|
||||
|
||||
### 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)
|
||||
|
||||
- 🧪 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
|
||||
@@ -49,7 +67,7 @@ _23 July 2025_
|
||||
- 🛠 Fixed a typo in the 3.9 MUSL riscv64 identifier (`cp39-musllinux_ricv64` -> `cp39-musllinux_riscv64`) (#2490)
|
||||
- 🛠 Mistyping `--only` now shows the correct possibilities, and even suggests near matches on Python 3.14+ (#2499)
|
||||
- 🛠 Only support one output from the repair step on linux like other platforms; auditwheel fixed this over four years ago! (#2478)
|
||||
- 🛠 We now use pattern matching extensively (#2434)
|
||||
- 💼 We now use pattern matching extensively (#2434)
|
||||
- 📚 We now have platform maintainers for our special platforms and interpreters! (#2481)
|
||||
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ cibuildwheel to run tests, add the following YAML to your CI config file:
|
||||
You can configure cibuildwheel with a config file, such as `pyproject.toml`.
|
||||
Options have the same names as the environment variable overrides, but are
|
||||
placed in `[tool.cibuildwheel]` and are lower case, with dashes, following
|
||||
common [TOML][https://toml.io] practice. Anything placed in subsections `linux`, `windows`,
|
||||
common [TOML](https://toml.io) practice. Anything placed in subsections `linux`, `windows`,
|
||||
`macos`, or `pyodide` will only affect those platforms. Lists can be used
|
||||
instead of strings for items that are naturally a list. Multiline strings also
|
||||
work just like in the environment variables. Environment variables will take
|
||||
|
||||
@@ -29,7 +29,7 @@ GitHub actions has pipx in all the runners as a supported package manager, as we
|
||||
name: Make SDist
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0 # Optional, use if you use setuptools_scm
|
||||
submodules: true # Optional, use if you have submodules
|
||||
@@ -54,7 +54,7 @@ Then, you need to publish the artifacts that the previous jobs have built. This
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name == 'release' && github.event.action == 'published'
|
||||
steps:
|
||||
- uses: actions/download-artifact@v4
|
||||
- uses: actions/download-artifact@v5
|
||||
with:
|
||||
pattern: cibw-*
|
||||
path: dist
|
||||
|
||||
+3
-3
@@ -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:
|
||||
|
||||
```yaml
|
||||
uses: pypa/cibuildwheel@v3.1.3
|
||||
uses: pypa/cibuildwheel@v3.1.4
|
||||
```
|
||||
|
||||
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
|
||||
# requirements-cibw.txt
|
||||
cibuildwheel==3.1.3
|
||||
cibuildwheel==3.1.4
|
||||
```
|
||||
|
||||
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
|
||||
python3 -m pip install pipx
|
||||
|
||||
pipx run cibuildwheel==3.1.3 --output-dir wheelhouse
|
||||
pipx run cibuildwheel==3.1.4 --output-dir wheelhouse
|
||||
pipx run twine upload wheelhouse/*.whl
|
||||
```
|
||||
|
||||
|
||||
+28
-22
@@ -74,7 +74,7 @@ Windows arm64 platform support is experimental.
|
||||
|
||||
See the [cibuildwheel 2 documentation](https://cibuildwheel.pypa.io/en/2.x/) for past end-of-life versions of Python.
|
||||
|
||||
#### Examples
|
||||
#### Examples {: #build-skip-examples }
|
||||
|
||||
!!! tab examples "pyproject.toml"
|
||||
|
||||
@@ -106,6 +106,12 @@ See the [cibuildwheel 2 documentation](https://cibuildwheel.pypa.io/en/2.x/) for
|
||||
|
||||
# Disable building PyPy wheels on all platforms
|
||||
skip = "pp*"
|
||||
|
||||
# Disable free-threading builds on all platforms
|
||||
skip = "cp3??t-*"
|
||||
|
||||
# Disable free-threading builds on Windows
|
||||
skip = "cp3??t-win*"
|
||||
```
|
||||
|
||||
!!! tab examples "Environment variables"
|
||||
@@ -137,12 +143,16 @@ See the [cibuildwheel 2 documentation](https://cibuildwheel.pypa.io/en/2.x/) for
|
||||
|
||||
# Disable building PyPy wheels on all platforms
|
||||
CIBW_SKIP: pp*
|
||||
|
||||
# Disable free-threading builds on all platforms
|
||||
CIBW_SKIP: "cp3??t-*"
|
||||
|
||||
# Disable free-threading builds on Windows
|
||||
CIBW_SKIP: "cp3??t-win*"
|
||||
```
|
||||
|
||||
Separate multiple selectors with a space.
|
||||
|
||||
|
||||
|
||||
It is generally recommended to set `CIBW_BUILD` as an environment variable, though `skip`
|
||||
tends to be useful in a config file; you can statically declare that you don't
|
||||
support a specific build, for example.
|
||||
@@ -344,13 +354,9 @@ values are:
|
||||
|
||||
- `cpython-prerelease`: Enables beta versions of Pythons if any are available
|
||||
(May-July, approximately).
|
||||
- `cpython-freethreading`: [PEP 703](https://www.python.org/dev/peps/pep-0703)
|
||||
introduced variants of CPython that can be built without the Global
|
||||
Interpreter Lock (GIL). Those variants are also known as free-threaded /
|
||||
no-gil. This will enable building these wheels for 3.13, which was considered
|
||||
experimental. The build identifiers for those variants have a `t` suffix in
|
||||
their `python_tag` (e.g. `cp313t-manylinux_x86_64`). Starting in 3.14,
|
||||
free-threaded builds are no longer experimental, so this enable is not needed.
|
||||
- `cpython-freethreading`: Enable experimental free-threaded builds for CPython 3.13.
|
||||
Free-threading wheels for 3.14+ are available without this flag, as it's [no
|
||||
longer considered experimental](https://peps.python.org/pep-0779/).
|
||||
- `pypy`: Enable PyPy.
|
||||
- `pypy-eol`: Enable PyPy versions that have passed end of life (if still available).
|
||||
- `graalpy`: Enable GraalPy.
|
||||
@@ -368,7 +374,15 @@ values are:
|
||||
that version of Python will become available without this flag.
|
||||
|
||||
!!! note
|
||||
Free threading was experimental in 3.13: [What’s New In Python 3.13](https://docs.python.org/3.13/whatsnew/3.13.html#free-threaded-cpython)
|
||||
[PEP 703](https://www.python.org/dev/peps/pep-0703) introduced variants of
|
||||
CPython that can be built without the Global Interpreter Lock (GIL). Those
|
||||
variants are also known as free-threaded / no-gil. The build identifiers for
|
||||
those variants have a `t` suffix in their `python_tag` (e.g.
|
||||
`cp313t-manylinux_x86_64`).
|
||||
|
||||
Free threading was [experimental in 3.13](https://docs.python.org/3.13/whatsnew/3.13.html#free-threaded-cpython), so it required an explicit enable flag. But, as noted above, free-threading doesn't require an enable flag for 3.14+.
|
||||
|
||||
For more info on building for free-threading, see the [Python Free-Threading Guide](https://py-free-threading.github.io/).
|
||||
|
||||
Default: empty.
|
||||
|
||||
@@ -392,13 +406,9 @@ without disabling your other enables.
|
||||
|
||||
```toml
|
||||
[tool.cibuildwheel]
|
||||
# Enable free-threaded support
|
||||
# Enable free-threaded support for CPython 3.13
|
||||
enable = ["cpython-freethreading"]
|
||||
|
||||
# Skip building free-threaded compatible wheels on Windows
|
||||
enable = ["cpython-freethreading"]
|
||||
skip = "*t-win*"
|
||||
|
||||
# Include all PyPy versions
|
||||
enable = ["pypy", "pypy-eol"]
|
||||
```
|
||||
@@ -410,18 +420,14 @@ without disabling your other enables.
|
||||
# Include latest Python beta
|
||||
CIBW_ENABLE: cpython-prerelease
|
||||
|
||||
# Include free-threaded support
|
||||
# Include free-threaded support for CPython 3.13
|
||||
CIBW_ENABLE: cpython-freethreading
|
||||
|
||||
# Include both
|
||||
CIBW_ENABLE: cpython-prerelease cpython-freethreading
|
||||
|
||||
# Skip building free-threaded compatible wheels on Windows
|
||||
CIBW_ENABLE: cpython-freethreading
|
||||
CIBW_SKIP: *t-win*
|
||||
|
||||
# Include all PyPy versions
|
||||
CIBW_ENABLE = pypy pypy-eol
|
||||
CIBW_ENABLE: pypy pypy-eol
|
||||
```
|
||||
|
||||
|
||||
|
||||
+14
-12
@@ -9,8 +9,8 @@ title: Working examples
|
||||
| Name | CI | OS | Notes |
|
||||
|-----------------------------------|----|----|:------|
|
||||
| [scikit-learn][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The machine learning library. A complex but clean config using many of cibuildwheel's features to build a large project with Cython and C++ extensions. |
|
||||
| [pytorch-fairseq][] | ![github icon][] | ![apple icon][] ![linux icon][] | Facebook AI Research Sequence-to-Sequence Toolkit written in Python. |
|
||||
| [duckdb][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | DuckDB is an analytical in-process SQL database management system |
|
||||
| [pytorch-fairseq][] | ![github icon][] | ![apple icon][] ![linux icon][] | Facebook AI Research Sequence-to-Sequence Toolkit written in Python. |
|
||||
| [NumPy][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The fundamental package for scientific computing with Python. |
|
||||
| [Tornado][] | ![github icon][] | ![linux icon][] ![apple icon][] ![windows icon][] | Tornado is a Python web framework and asynchronous networking library. Uses stable ABI for a small C extension. |
|
||||
| [NCNN][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | ncnn is a high-performance neural network inference framework optimized for the mobile platform |
|
||||
@@ -22,6 +22,7 @@ title: Working examples
|
||||
| [MemRay][] | ![github icon][] | ![linux icon][] | Memray is a memory profiler for Python |
|
||||
| [uvloop][] | ![github icon][] | ![apple icon][] ![linux icon][] | Ultra fast asyncio event loop. |
|
||||
| [psutil][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Cross-platform lib for process and system monitoring in Python |
|
||||
| [falcon][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Falcon is a no-magic ASGI/WSGI API and microservices framework; it uses cibuildwheel for (optional) Cython extensions. |
|
||||
| [Google Benchmark][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A microbenchmark support library |
|
||||
| [vaex][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Out-of-Core hybrid Apache Arrow/NumPy DataFrame for Python, ML, visualization and exploration of big tabular data at a billion rows per second 🚀 |
|
||||
| [Apache Beam][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Apache Beam is a unified programming model for Batch and Streaming data processing. |
|
||||
@@ -40,8 +41,8 @@ title: Working examples
|
||||
| [OpenSpiel][] | ![github icon][] | ![apple icon][] ![linux icon][] | OpenSpiel is a collection of environments and algorithms for research in general reinforcement learning and search/planning in games. |
|
||||
| [Dependency Injector][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Dependency injection framework for Python, uses Windows TravisCI |
|
||||
| [UltraJSON][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Ultra fast JSON decoder and encoder written in C with Python bindings |
|
||||
| [pyzmq][] | ![github icon][] ![circleci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python bindings for zeromq, the networking library. Uses Cython on CPython and CFFI on PyPy. ARM wheels for linux are built natively on CircleCI. |
|
||||
| [CTranslate2][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes libraries from the [Intel oneAPI toolkit](https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit.html) and CUDA kernels compiled for multiple GPU architectures. |
|
||||
| [pyzmq][] | ![github icon][] ![circleci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python bindings for zeromq, the networking library. Uses Cython on CPython and CFFI on PyPy. ARM wheels for linux are built natively on CircleCI. |
|
||||
| [Implicit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes GPU support for linux wheels |
|
||||
| [tinyobjloader][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Tiny but powerful single file wavefront obj loader |
|
||||
| [vispy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Main repository for Vispy |
|
||||
@@ -64,8 +65,8 @@ title: Working examples
|
||||
| [PyTables][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python package to manage extremely large amounts of data |
|
||||
| [google neuroglancer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | WebGL-based viewer for volumetric data |
|
||||
| [Parselmouth][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python interface to the Praat software package, using pybind11, C++17 and CMake, with the core Praat static library built only once and shared between wheels. |
|
||||
| [DeepForest][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | An Efficient, Scalable and Optimized Python Framework for Deep Forest (2021.2.1) |
|
||||
| [AutoPy][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
||||
| [DeepForest][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | An Efficient, Scalable and Optimized Python Framework for Deep Forest (2021.2.1) |
|
||||
| [H3-py][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for H3, a hierarchical hexagonal geospatial indexing system |
|
||||
| [time-machine][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Time mocking library using only the CPython C API. |
|
||||
| [mosec][] | ![github icon][] | ![linux icon][] ![apple icon][] | A machine learning model serving framework powered by Rust |
|
||||
@@ -76,24 +77,24 @@ title: Working examples
|
||||
| [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Kernel Density Estimation in Python |
|
||||
| [dd-trace-py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Uses custom alternate arch emulation on GitHub |
|
||||
| [tgcalls][] | ![github icon][] | ![apple icon][] ![windows icon][] | Python `pybind11` binding to Telegram's WebRTC library with third party dependencies like `OpenSSL`, `MozJPEG`, `FFmpeg`, etc. |
|
||||
| [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] | ![windows icon][] ![linux icon][] | Python wrapper around rapidjson |
|
||||
| [pybind11 python_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Example pybind11 module built with a Python-based build system |
|
||||
| [python-rapidjson][] | ![travisci icon][] ![gitlab icon][] | ![windows icon][] ![linux icon][] | Python wrapper around rapidjson |
|
||||
| [sourmash][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Quickly search, compare, and analyze genomic and metagenomic data sets. |
|
||||
| [abess][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A fast best-subset selection library. It uses cibuildwheel to build a large project with C++ extensions. |
|
||||
| [python-snappy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Python bindings for the snappy google library |
|
||||
| [cyvcf2][] | ![github icon][] | ![apple icon][] ![linux icon][] | cython + htslib == fast VCF and BCF processing |
|
||||
| [jq.py][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | Python bindings for jq |
|
||||
| [matrixprofile][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python 3 library making time series data mining tasks, utilizing matrix profile algorithms, accessible to everyone. |
|
||||
| [Tokenizer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast and customizable text tokenization library with BPE and SentencePiece support |
|
||||
| [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` |
|
||||
| [Tokenizer][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast and customizable text tokenization library with BPE and SentencePiece support |
|
||||
| [iminuit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Jupyter-friendly Python interface for C++ MINUIT2 |
|
||||
| [pillow-heif][] | ![github icon][] ![cirrusci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Bindings to libheif library with third party dependencies. Fully automated CI for tests and publishing including Apple Silicon builds. |
|
||||
| [keyvi][] | ![github icon][] | ![linux icon][] ![apple icon][] | FST based key value index highly optimized for size and lookup performance, utilizes ccache action for improved runtime |
|
||||
| [PyGLM][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Fast OpenGL Mathematics (GLM) for Python |
|
||||
| [TgCrypto][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
|
||||
| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 |
|
||||
| [streaming-form-data][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Streaming parser for multipart/form-data written in Cython |
|
||||
| [power-grid-model][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python/C++ library for distribution power system analysis |
|
||||
| [streaming-form-data][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Streaming parser for multipart/form-data written in Cython |
|
||||
| [pybase64][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast Base64 encoding/decoding in Python |
|
||||
| [bx-python][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. |
|
||||
| [boost-histogram][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Supports full range of wheels, including PyPy and alternate archs. |
|
||||
@@ -119,8 +120,8 @@ title: Working examples
|
||||
| [pybind11 cross build example][] | ![github icon][] ![gitlab icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Same as pybind11 cmake_example but used to demo Linux ARM + Windows + macOS builds on GitLab |
|
||||
|
||||
[scikit-learn]: https://github.com/scikit-learn/scikit-learn
|
||||
[pytorch-fairseq]: https://github.com/facebookresearch/fairseq
|
||||
[duckdb]: https://github.com/duckdb/duckdb
|
||||
[pytorch-fairseq]: https://github.com/facebookresearch/fairseq
|
||||
[NumPy]: https://github.com/numpy/numpy
|
||||
[Tornado]: https://github.com/tornadoweb/tornado
|
||||
[NCNN]: https://github.com/Tencent/ncnn
|
||||
@@ -132,6 +133,7 @@ title: Working examples
|
||||
[MemRay]: https://github.com/bloomberg/memray
|
||||
[uvloop]: https://github.com/MagicStack/uvloop
|
||||
[psutil]: https://github.com/giampaolo/psutil
|
||||
[falcon]: https://github.com/falconry/falcon
|
||||
[Google Benchmark]: https://github.com/google/benchmark
|
||||
[vaex]: https://github.com/vaexio/vaex
|
||||
[Apache Beam]: https://github.com/apache/beam
|
||||
@@ -150,8 +152,8 @@ title: Working examples
|
||||
[OpenSpiel]: https://github.com/google-deepmind/open_spiel
|
||||
[Dependency Injector]: https://github.com/ets-labs/python-dependency-injector
|
||||
[UltraJSON]: https://github.com/ultrajson/ultrajson
|
||||
[pyzmq]: https://github.com/zeromq/pyzmq
|
||||
[CTranslate2]: https://github.com/OpenNMT/CTranslate2
|
||||
[pyzmq]: https://github.com/zeromq/pyzmq
|
||||
[Implicit]: https://github.com/benfred/implicit
|
||||
[tinyobjloader]: https://github.com/tinyobjloader/tinyobjloader
|
||||
[vispy]: https://github.com/vispy/vispy
|
||||
@@ -174,8 +176,8 @@ title: Working examples
|
||||
[PyTables]: https://github.com/PyTables/PyTables
|
||||
[google neuroglancer]: https://github.com/google/neuroglancer
|
||||
[Parselmouth]: https://github.com/YannickJadoul/Parselmouth
|
||||
[DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest
|
||||
[AutoPy]: https://github.com/autopilot-rs/autopy
|
||||
[DeepForest]: https://github.com/LAMDA-NJU/Deep-Forest
|
||||
[H3-py]: https://github.com/uber/h3-py
|
||||
[time-machine]: https://github.com/adamchainz/time-machine
|
||||
[mosec]: https://github.com/mosecorg/mosec
|
||||
@@ -186,24 +188,24 @@ title: Working examples
|
||||
[KDEpy]: https://github.com/tommyod/KDEpy
|
||||
[dd-trace-py]: https://github.com/DataDog/dd-trace-py
|
||||
[tgcalls]: https://github.com/MarshalX/tgcalls
|
||||
[python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson
|
||||
[pybind11 python_example]: https://github.com/pybind/python_example
|
||||
[python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson
|
||||
[sourmash]: https://github.com/sourmash-bio/sourmash
|
||||
[abess]: https://github.com/abess-team/abess
|
||||
[python-snappy]: https://github.com/intake/python-snappy
|
||||
[cyvcf2]: https://github.com/brentp/cyvcf2
|
||||
[jq.py]: https://github.com/mwilliamson/jq.py
|
||||
[matrixprofile]: https://github.com/matrix-profile-foundation/matrixprofile
|
||||
[Tokenizer]: https://github.com/OpenNMT/Tokenizer
|
||||
[Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python
|
||||
[Tokenizer]: https://github.com/OpenNMT/Tokenizer
|
||||
[iminuit]: https://github.com/scikit-hep/iminuit
|
||||
[pillow-heif]: https://github.com/bigcat88/pillow_heif
|
||||
[keyvi]: https://github.com/KeyviDev/keyvi
|
||||
[PyGLM]: https://github.com/Zuzu-Typ/PyGLM
|
||||
[TgCrypto]: https://github.com/pyrogram/tgcrypto
|
||||
[iDynTree]: https://github.com/robotology/idyntree
|
||||
[streaming-form-data]: https://github.com/siddhantgoel/streaming-form-data
|
||||
[power-grid-model]: https://github.com/PowerGridModel/power-grid-model
|
||||
[streaming-form-data]: https://github.com/siddhantgoel/streaming-form-data
|
||||
[pybase64]: https://github.com/mayeut/pybase64
|
||||
[bx-python]: https://github.com/bxlab/bx-python
|
||||
[boost-histogram]: https://github.com/scikit-hep/boost-histogram
|
||||
|
||||
@@ -6,7 +6,7 @@ jobs:
|
||||
- bash: |
|
||||
set -o errexit
|
||||
python3 -m pip install --upgrade pip
|
||||
pip3 install cibuildwheel==3.1.3
|
||||
pip3 install cibuildwheel==3.1.4
|
||||
displayName: Install dependencies
|
||||
- bash: cibuildwheel --output-dir wheelhouse .
|
||||
displayName: Build wheels
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
- bash: |
|
||||
set -o errexit
|
||||
python3 -m pip install --upgrade pip
|
||||
python3 -m pip install cibuildwheel==3.1.3
|
||||
python3 -m pip install cibuildwheel==3.1.4
|
||||
displayName: Install dependencies
|
||||
- bash: cibuildwheel --output-dir wheelhouse .
|
||||
displayName: Build wheels
|
||||
@@ -34,7 +34,7 @@ jobs:
|
||||
- bash: |
|
||||
set -o errexit
|
||||
python -m pip install --upgrade pip
|
||||
pip install cibuildwheel==3.1.3
|
||||
pip install cibuildwheel==3.1.4
|
||||
displayName: Install dependencies
|
||||
- bash: cibuildwheel --output-dir wheelhouse .
|
||||
displayName: Build wheels
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
- run:
|
||||
name: Build the Linux wheels.
|
||||
command: |
|
||||
python3 -m pip install --user cibuildwheel==3.1.3
|
||||
python3 -m pip install --user cibuildwheel==3.1.4
|
||||
cibuildwheel --output-dir wheelhouse
|
||||
- store_artifacts:
|
||||
path: wheelhouse/
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
- run:
|
||||
name: Build the Linux aarch64 wheels.
|
||||
command: |
|
||||
python3 -m pip install --user cibuildwheel==3.1.3
|
||||
python3 -m pip install --user cibuildwheel==3.1.4
|
||||
python3 -m cibuildwheel --output-dir wheelhouse
|
||||
- store_artifacts:
|
||||
path: wheelhouse/
|
||||
@@ -44,7 +44,7 @@ jobs:
|
||||
name: Build the OS X wheels.
|
||||
command: |
|
||||
sudo softwareupdate --install-rosetta --agree-to-license # for python<=3.8 or x86_64/universal2 tests
|
||||
pip3 install cibuildwheel==3.1.3
|
||||
pip3 install cibuildwheel==3.1.4
|
||||
cibuildwheel --output-dir wheelhouse
|
||||
- store_artifacts:
|
||||
path: wheelhouse/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
||||
install_cibuildwheel_script:
|
||||
- python -m pip install cibuildwheel==3.1.3
|
||||
- python -m pip install cibuildwheel==3.1.4
|
||||
run_cibuildwheel_script:
|
||||
- cibuildwheel
|
||||
wheels_artifacts:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
build_and_store_wheels: &BUILD_AND_STORE_WHEELS
|
||||
install_cibuildwheel_script:
|
||||
- python -m pip install cibuildwheel==3.1.3
|
||||
- python -m pip install cibuildwheel==3.1.4
|
||||
run_cibuildwheel_script:
|
||||
- cibuildwheel
|
||||
wheels_artifacts:
|
||||
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
platform: pyodide
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
# GitHub Actions can't currently run the Android emulator on macOS.
|
||||
- name: Skip Android tests on macOS
|
||||
@@ -61,7 +61,7 @@ jobs:
|
||||
sudo udevadm trigger --name-match=kvm
|
||||
|
||||
- name: Build wheels
|
||||
uses: pypa/cibuildwheel@v3.1.3
|
||||
uses: pypa/cibuildwheel@v3.1.4
|
||||
env:
|
||||
CIBW_PLATFORM: ${{ matrix.platform || 'auto' }}
|
||||
# Can also be configured directly, using `with:`
|
||||
@@ -79,7 +79,7 @@ jobs:
|
||||
name: Build source distribution
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Build sdist
|
||||
run: pipx run build --sdist
|
||||
@@ -99,7 +99,7 @@ jobs:
|
||||
# or, alternatively, upload to PyPI on every tag starting with 'v' (remove on: release above to use this)
|
||||
# if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
||||
steps:
|
||||
- uses: actions/download-artifact@v4
|
||||
- uses: actions/download-artifact@v5
|
||||
with:
|
||||
# unpacks all CIBW artifacts into dist/
|
||||
pattern: cibw-*
|
||||
|
||||
@@ -12,10 +12,10 @@ jobs:
|
||||
os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, windows-11-arm, macos-13, macos-14]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Build wheels
|
||||
uses: pypa/cibuildwheel@v3.1.3
|
||||
uses: pypa/cibuildwheel@v3.1.4
|
||||
# env:
|
||||
# CIBW_SOME_OPTION: value
|
||||
# ...
|
||||
|
||||
@@ -12,10 +12,10 @@ jobs:
|
||||
os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, windows-11-arm, macos-13, macos-14]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Build wheels
|
||||
run: pipx run cibuildwheel==3.1.3
|
||||
run: pipx run cibuildwheel==3.1.4
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
|
||||
@@ -12,7 +12,7 @@ jobs:
|
||||
os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, windows-11-arm, macos-13, macos-14]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Set up QEMU
|
||||
if: runner.os == 'Linux' && runner.arch == 'X64'
|
||||
@@ -21,7 +21,7 @@ jobs:
|
||||
platforms: all
|
||||
|
||||
- name: Build wheels
|
||||
uses: pypa/cibuildwheel@v3.1.3
|
||||
uses: pypa/cibuildwheel@v3.1.4
|
||||
env:
|
||||
# configure cibuildwheel on Linux to build native archs ('auto'),
|
||||
# and to split the remaining architectures between the x86_64 and
|
||||
|
||||
@@ -12,7 +12,7 @@ linux:
|
||||
DOCKER_TLS_CERTDIR: ""
|
||||
script:
|
||||
- curl -sSL https://get.docker.com/ | sh
|
||||
- python -m pip install cibuildwheel==3.1.3
|
||||
- python -m pip install cibuildwheel==3.1.4
|
||||
- cibuildwheel --output-dir wheelhouse
|
||||
artifacts:
|
||||
paths:
|
||||
@@ -23,7 +23,7 @@ windows:
|
||||
before_script:
|
||||
- choco install python -y --allow-downgrade --version 3.12.4
|
||||
- choco install git.install -y
|
||||
- py -m pip install cibuildwheel==3.1.3
|
||||
- py -m pip install cibuildwheel==3.1.4
|
||||
script:
|
||||
- py -m cibuildwheel --output-dir wheelhouse --platform windows
|
||||
artifacts:
|
||||
@@ -35,7 +35,7 @@ windows:
|
||||
macos:
|
||||
image: macos-14-xcode-15
|
||||
before_script:
|
||||
- python3 -m pip install cibuildwheel==3.1.3
|
||||
- python3 -m pip install cibuildwheel==3.1.4
|
||||
script:
|
||||
- python3 -m cibuildwheel --output-dir wheelhouse
|
||||
artifacts:
|
||||
|
||||
@@ -14,7 +14,7 @@ linux:
|
||||
- curl -sSL https://get.docker.com/ | sh
|
||||
# Warning: This is extremely slow, be careful with how many wheels you build
|
||||
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||
- python -m pip install cibuildwheel==3.1.3
|
||||
- python -m pip install cibuildwheel==3.1.4
|
||||
# Assuming your CI runner's default architecture is x86_64...
|
||||
- cibuildwheel --output-dir wheelhouse --platform linux --archs aarch64
|
||||
artifacts:
|
||||
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
- ln -s /c/Python312/python.exe /c/Python312/python3.exe
|
||||
|
||||
install:
|
||||
- python3 -m pip install cibuildwheel==3.1.3
|
||||
- python3 -m pip install cibuildwheel==3.1.4
|
||||
|
||||
script:
|
||||
# build the wheels, put them into './dist'
|
||||
|
||||
@@ -26,7 +26,7 @@ jobs:
|
||||
- ln -s /c/Python312/python.exe /c/Python312/python3.exe
|
||||
|
||||
install:
|
||||
- python3 -m pip install cibuildwheel==3.1.3
|
||||
- python3 -m pip install cibuildwheel==3.1.4
|
||||
|
||||
script:
|
||||
# build the wheels, put them into './wheelhouse'
|
||||
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
- stage: deploy
|
||||
name: Build and deploy Linux wheels
|
||||
services: docker
|
||||
install: python3 -m pip install cibuildwheel==3.1.3 twine
|
||||
install: python3 -m pip install cibuildwheel==3.1.4 twine
|
||||
script: python3 -m cibuildwheel --output-dir wheelhouse
|
||||
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
||||
# Deploy on windows
|
||||
@@ -60,7 +60,7 @@ jobs:
|
||||
name: Build and deploy Windows wheels
|
||||
os: windows
|
||||
language: shell
|
||||
install: python3 -m pip install cibuildwheel==3.1.3 twine
|
||||
install: python3 -m pip install cibuildwheel==3.1.4 twine
|
||||
script: python3 -m cibuildwheel --output-dir wheelhouse
|
||||
after_success: python3 -m twine upload --skip-existing wheelhouse/*.whl
|
||||
|
||||
|
||||
@@ -58,6 +58,7 @@ def tests(session: nox.Session) -> None:
|
||||
session.run("pytest", *session.posargs)
|
||||
else:
|
||||
unit_test_args = ["--run-docker"] if sys.platform.startswith("linux") else []
|
||||
session.run("pytest", "cibuildwheel") # run doctests
|
||||
session.run("pytest", "unit_test", *unit_test_args)
|
||||
session.run("pytest", "test", "-x", "--durations", "0", "--timeout=2400", "test")
|
||||
|
||||
|
||||
+5
-2
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
||||
|
||||
[project]
|
||||
name = "cibuildwheel"
|
||||
version = "3.1.3"
|
||||
version = "3.1.4"
|
||||
description = "Build Python wheels on CI with minimal configuration."
|
||||
readme = "README.md"
|
||||
license = "BSD-2-Clause"
|
||||
@@ -45,6 +45,8 @@ dependencies = [
|
||||
"filelock",
|
||||
"humanize",
|
||||
"packaging>=20.9",
|
||||
# patchelf is used for Android
|
||||
"patchelf; (sys_platform == 'linux' or sys_platform == 'darwin') and (platform_machine == 'x86_64' or platform_machine == 'arm64' or platform_machine == 'aarch64')",
|
||||
"platformdirs",
|
||||
"pyelftools>=0.29",
|
||||
"wheel>=0.33.6",
|
||||
@@ -93,6 +95,7 @@ test = [
|
||||
"setuptools",
|
||||
"tomli_w",
|
||||
"validate-pyproject",
|
||||
"xdoctest",
|
||||
]
|
||||
dev = [
|
||||
{include-group = "bin"},
|
||||
@@ -103,7 +106,7 @@ dev = [
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
minversion = "6.0"
|
||||
addopts = ["-ra", "--showlocals", "--strict-markers", "--strict-config"]
|
||||
addopts = ["-ra", "--showlocals", "--strict-markers", "--strict-config", "--xdoctest", "--ignore-glob=*venv*"]
|
||||
junit_family = "xunit2"
|
||||
xfail_strict = true
|
||||
filterwarnings = ["error"]
|
||||
|
||||
+10
-9
@@ -90,8 +90,17 @@ def test_android_home(tmp_path, capfd):
|
||||
assert "ANDROID_HOME environment variable is not set" in capfd.readouterr().err
|
||||
|
||||
|
||||
# Can fail to setup
|
||||
# the first build can fail to setup - mark as flaky, and serial to make sure it runs first
|
||||
@pytest.mark.serial
|
||||
@pytest.mark.flaky(reruns=2)
|
||||
def test_expected_wheels(tmp_path):
|
||||
new_c_project().generate(tmp_path)
|
||||
wheels = cibuildwheel_run(tmp_path, add_env={"CIBW_PLATFORM": "android"})
|
||||
assert wheels == expected_wheels(
|
||||
"spam", "0.1.0", platform="android", machine_arch=native_arch.android_abi
|
||||
)
|
||||
|
||||
|
||||
def test_frontend_good(tmp_path):
|
||||
new_c_project().generate(tmp_path)
|
||||
wheels = cibuildwheel_run(
|
||||
@@ -112,14 +121,6 @@ def test_frontend_bad(frontend, tmp_path, capfd):
|
||||
assert "Android requires the build frontend to be 'build'" in capfd.readouterr().err
|
||||
|
||||
|
||||
def test_expected_wheels(tmp_path):
|
||||
new_c_project().generate(tmp_path)
|
||||
wheels = cibuildwheel_run(tmp_path, add_env={"CIBW_PLATFORM": "android"})
|
||||
assert wheels == expected_wheels(
|
||||
"spam", "0.1.0", platform="android", machine_arch=native_arch.android_abi
|
||||
)
|
||||
|
||||
|
||||
@needs_emulator
|
||||
def test_archs(tmp_path, capfd):
|
||||
new_c_project().generate(tmp_path)
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
import errno
|
||||
import shutil
|
||||
import sys
|
||||
|
||||
import pytest
|
||||
|
||||
import cibuildwheel.__main__ as main_module
|
||||
from cibuildwheel.__main__ import main
|
||||
|
||||
|
||||
def test_clean_cache_when_cache_exists(tmp_path, monkeypatch, capfd):
|
||||
fake_cache_dir = (tmp_path / "cibw_cache").resolve()
|
||||
monkeypatch.setattr(main_module, "CIBW_CACHE_PATH", fake_cache_dir)
|
||||
|
||||
fake_cache_dir.mkdir(parents=True, exist_ok=True)
|
||||
assert fake_cache_dir.exists()
|
||||
|
||||
cibw_sentinel = fake_cache_dir / "CACHEDIR.TAG"
|
||||
cibw_sentinel.write_text(
|
||||
"Signature: 8a477f597d28d172789f06886806bc55\n"
|
||||
"# This file is a cache directory tag created by cibuildwheel.\n"
|
||||
"# For information about cache directory tags, see:\n"
|
||||
"# https://www.brynosaurus.com/cachedir/",
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
dummy_file = fake_cache_dir / "dummy.txt"
|
||||
dummy_file.write_text("hello")
|
||||
|
||||
monkeypatch.setattr(sys, "argv", ["cibuildwheel", "--clean-cache"])
|
||||
|
||||
with pytest.raises(SystemExit) as e:
|
||||
main()
|
||||
|
||||
assert e.value.code == 0
|
||||
|
||||
out, err = capfd.readouterr()
|
||||
assert f"Clearing cache directory: {fake_cache_dir}" in out
|
||||
assert "Cache cleared successfully." in out
|
||||
assert not fake_cache_dir.exists()
|
||||
|
||||
|
||||
def test_clean_cache_when_cache_does_not_exist(tmp_path, monkeypatch, capfd):
|
||||
fake_cache_dir = (tmp_path / "nonexistent_cache").resolve()
|
||||
monkeypatch.setattr(main_module, "CIBW_CACHE_PATH", fake_cache_dir)
|
||||
|
||||
monkeypatch.setattr(sys, "argv", ["cibuildwheel", "--clean-cache"])
|
||||
|
||||
with pytest.raises(SystemExit) as e:
|
||||
main()
|
||||
|
||||
assert e.value.code == 0
|
||||
|
||||
out, err = capfd.readouterr()
|
||||
assert f"Cache directory does not exist: {fake_cache_dir}" in out
|
||||
|
||||
|
||||
def test_clean_cache_with_error(tmp_path, monkeypatch, capfd):
|
||||
fake_cache_dir = (tmp_path / "cibw_cache").resolve()
|
||||
monkeypatch.setattr(main_module, "CIBW_CACHE_PATH", fake_cache_dir)
|
||||
|
||||
fake_cache_dir.mkdir(parents=True, exist_ok=True)
|
||||
assert fake_cache_dir.exists()
|
||||
|
||||
cibw_sentinel = fake_cache_dir / "CACHEDIR.TAG"
|
||||
cibw_sentinel.write_text(
|
||||
"Signature: 8a477f597d28d172789f06886806bc55\n"
|
||||
"# This file is a cache directory tag created by cibuildwheel.\n"
|
||||
"# For information about cache directory tags, see:\n"
|
||||
"# https://www.brynosaurus.com/cachedir/",
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
monkeypatch.setattr(sys, "argv", ["cibuildwheel", "--clean-cache"])
|
||||
|
||||
def fake_rmtree(path): # noqa: ARG001
|
||||
raise OSError(errno.EACCES, "Permission denied")
|
||||
|
||||
monkeypatch.setattr(shutil, "rmtree", fake_rmtree)
|
||||
|
||||
with pytest.raises(SystemExit) as e:
|
||||
main()
|
||||
|
||||
assert e.value.code == 1
|
||||
|
||||
out, err = capfd.readouterr()
|
||||
assert f"Clearing cache directory: {fake_cache_dir}" in out
|
||||
assert "Error clearing cache:" in err
|
||||
|
||||
|
||||
def test_clean_cache_without_sentinel(tmp_path, monkeypatch, capfd):
|
||||
fake_cache_dir = (tmp_path / "not_a_cache").resolve()
|
||||
monkeypatch.setattr(main_module, "CIBW_CACHE_PATH", fake_cache_dir)
|
||||
|
||||
fake_cache_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
monkeypatch.setattr(sys, "argv", ["cibuildwheel", "--clean-cache"])
|
||||
|
||||
with pytest.raises(SystemExit) as e:
|
||||
main()
|
||||
|
||||
assert e.value.code == 1
|
||||
|
||||
out, err = capfd.readouterr()
|
||||
assert "does not appear to be a cibuildwheel cache directory" in err
|
||||
assert fake_cache_dir.exists()
|
||||
|
||||
|
||||
def test_clean_cache_with_invalid_signature(tmp_path, monkeypatch, capfd):
|
||||
fake_cache_dir = (tmp_path / "fake_cache").resolve()
|
||||
monkeypatch.setattr(main_module, "CIBW_CACHE_PATH", fake_cache_dir)
|
||||
|
||||
fake_cache_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
cibw_sentinel = fake_cache_dir / "CACHEDIR.TAG"
|
||||
cibw_sentinel.write_text("Invalid signature\n# This is not a real cache directory tag")
|
||||
|
||||
monkeypatch.setattr(sys, "argv", ["cibuildwheel", "--clean-cache"])
|
||||
|
||||
with pytest.raises(SystemExit) as e:
|
||||
main()
|
||||
|
||||
assert e.value.code == 1
|
||||
|
||||
out, err = capfd.readouterr()
|
||||
assert "does not contain a valid cache directory signature" in err
|
||||
assert fake_cache_dir.exists()
|
||||
@@ -278,3 +278,12 @@ def test_pyodide_on_windows(monkeypatch, capsys):
|
||||
|
||||
assert exit.value.code == 2
|
||||
assert "Building for pyodide is not supported on Windows" in err
|
||||
|
||||
|
||||
def test_empty_archs_platform(platform, intercepted_build_args, monkeypatch):
|
||||
monkeypatch.setenv("CIBW_ARCHS", "")
|
||||
|
||||
main()
|
||||
|
||||
options = intercepted_build_args.args[0]
|
||||
assert options.globals.architectures == Architecture.auto_archs(platform)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import json
|
||||
import os
|
||||
import platform
|
||||
import random
|
||||
import shutil
|
||||
import subprocess
|
||||
@@ -29,16 +28,7 @@ from cibuildwheel.oci_container import (
|
||||
# for these tests we use manylinux2014 images, because they're available on
|
||||
# multi architectures and include python3.8
|
||||
DEFAULT_IMAGE = "quay.io/pypa/manylinux2014:2025.03.08-1"
|
||||
pm = platform.machine()
|
||||
DEFAULT_OCI_PLATFORM = {
|
||||
"AMD64": OCIPlatform.AMD64,
|
||||
"x86_64": OCIPlatform.AMD64,
|
||||
"ppc64le": OCIPlatform.PPC64LE,
|
||||
"s390x": OCIPlatform.S390X,
|
||||
"aarch64": OCIPlatform.ARM64,
|
||||
"arm64": OCIPlatform.ARM64,
|
||||
"ARM64": OCIPlatform.ARM64,
|
||||
}[pm]
|
||||
DEFAULT_OCI_PLATFORM = OCIPlatform.native()
|
||||
|
||||
PODMAN = OCIContainerEngineConfig(name="podman")
|
||||
|
||||
@@ -494,7 +484,7 @@ def test_parse_engine_config(config, name, create_args, capsys):
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.skipif(pm != "x86_64", reason="Only runs on x86_64")
|
||||
@pytest.mark.skipif(DEFAULT_OCI_PLATFORM != OCIPlatform.AMD64, reason="Only runs on x86_64")
|
||||
def test_enforce_32_bit(container_engine):
|
||||
with OCIContainer(
|
||||
engine=container_engine, image=DEFAULT_IMAGE, oci_platform=OCIPlatform.i386
|
||||
@@ -551,7 +541,7 @@ def test_local_image(
|
||||
) -> None:
|
||||
if (
|
||||
detect_ci_provider() == CIProvider.travis_ci
|
||||
and pm != "x86_64"
|
||||
and DEFAULT_OCI_PLATFORM != OCIPlatform.AMD64
|
||||
and platform != DEFAULT_OCI_PLATFORM
|
||||
):
|
||||
pytest.skip("Skipping test because docker on this platform does not support QEMU")
|
||||
@@ -581,7 +571,7 @@ def test_local_image(
|
||||
def test_multiarch_image(container_engine, platform):
|
||||
if (
|
||||
detect_ci_provider() == CIProvider.travis_ci
|
||||
and pm != "x86_64"
|
||||
and DEFAULT_OCI_PLATFORM != OCIPlatform.AMD64
|
||||
and platform != DEFAULT_OCI_PLATFORM
|
||||
):
|
||||
pytest.skip("Skipping test because docker on this platform does not support QEMU")
|
||||
|
||||
Reference in New Issue
Block a user