[Bot] Update dependencies (#2939)

* Update dependencies

* fix: older pip for graalpy on Windows

The dependency update regenerated the constraints and dropped the pip
hold-back for GraalPy on Windows, where newer pip breaks. Restore the
marker-based pin.

Assisted-by: ClaudeCode:claude-opus-4.8

* ci: keep graalpy pip workaround across dependency bumps

update_constraints now re-applies the GraalPy Windows pip hold-back after
uv pip compile, so the bot no longer wipes it each run. Target only the
Python versions that ship a GraalPy config (3.12), derived from
build-platforms.toml; drop the stale pin from the 3.11 constraints.

Assisted-by: ClaudeCode:claude-opus-4.8

* fix(macos): accept .tar.gz PyPy archives

PyPy switched its macOS downloads from .tar.bz2 to .tar.gz, which tripped
the hard-coded extension assert in install_pypy. Accept both.

Assisted-by: ClaudeCode:claude-opus-4.8

* ci: hold filelock back for graalpy

filelock >=3.30 imports errno.ENOTSUP, which GraalPy lacks, so virtualenv
fails on GraalPy. Hold it at 3.29.4 for GraalPy until the upstream fix
ships (~2026-08), reusing the update_constraints workaround mechanism.

Assisted-by: ClaudeCode:claude-opus-4.8

* ci: bump filelock for graalpy

* revert android cp315 update

see https://github.com/pypa/cibuildwheel/pull/2933#issuecomment-4821042715

---------

Co-authored-by: cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com>
Co-authored-by: Henry Schreiner <henryfs@princeton.edu>
Co-authored-by: mayeut <mayeut@users.noreply.github.com>
This commit is contained in:
cibuildwheel-bot[bot]
2026-07-21 21:12:27 -04:00
committed by GitHub
co-authored by cibuildwheel-bot[bot] <83877280+cibuildwheel-bot[bot]@users.noreply.github.com> Henry Schreiner mayeut
parent f8d8cca5bb
commit 17b74206ab
18 changed files with 752 additions and 699 deletions
+9 -8
View File
@@ -215,18 +215,19 @@ def install_cpython(_tmp: Path, version: str, url: str, free_threading: bool, sh
def install_pypy(tmp: Path, url: str, sha256: str) -> Path:
pypy_tar_bz2 = url.rsplit("/", 1)[-1]
extension = ".tar.bz2"
assert pypy_tar_bz2.endswith(extension)
installation_path = CIBW_CACHE_PATH / pypy_tar_bz2[: -len(extension)]
pypy_archive = url.rsplit("/", 1)[-1]
# PyPy ships .tar.bz2 for some platforms and .tar.gz for others.
extension = ".tar.bz2" if pypy_archive.endswith(".tar.bz2") else ".tar.gz"
assert pypy_archive.endswith(extension)
installation_path = CIBW_CACHE_PATH / pypy_archive[: -len(extension)]
with FileLock(str(installation_path) + ".lock"):
if not installation_path.exists():
downloaded_tar_bz2 = tmp / pypy_tar_bz2
download(url, downloaded_tar_bz2, sha256=sha256)
downloaded_archive = tmp / pypy_archive
download(url, downloaded_archive, sha256=sha256)
installation_path.parent.mkdir(parents=True, exist_ok=True)
with remove_on_error(installation_path):
call("tar", "-C", installation_path.parent, "-xf", downloaded_tar_bz2)
downloaded_tar_bz2.unlink()
call("tar", "-C", installation_path.parent, "-xf", downloaded_archive)
downloaded_archive.unlink()
return installation_path / "bin" / "pypy3"
+22 -22
View File
@@ -162,18 +162,18 @@ python_configurations = [
{ identifier = "cp314t-macosx_x86_64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.6/python-3.14.6-macos11.pkg", sha256 = "d3c9fff52214847e4fab03e9eaf53dd2a8e51e3534aa0b61f201b749f86bef28" },
{ identifier = "cp314t-macosx_arm64", version = "3.14", url = "https://www.python.org/ftp/python/3.14.6/python-3.14.6-macos11.pkg", sha256 = "d3c9fff52214847e4fab03e9eaf53dd2a8e51e3534aa0b61f201b749f86bef28" },
{ identifier = "cp314t-macosx_universal2", version = "3.14", url = "https://www.python.org/ftp/python/3.14.6/python-3.14.6-macos11.pkg", sha256 = "d3c9fff52214847e4fab03e9eaf53dd2a8e51e3534aa0b61f201b749f86bef28" },
{ identifier = "cp315-macosx_x86_64", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b3-macos11.pkg", sha256 = "b6f551ddffcd7e423fb9863458ca0980d622235cca49f2382f3a9e2052df469a" },
{ identifier = "cp315-macosx_arm64", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b3-macos11.pkg", sha256 = "b6f551ddffcd7e423fb9863458ca0980d622235cca49f2382f3a9e2052df469a" },
{ identifier = "cp315-macosx_universal2", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b3-macos11.pkg", sha256 = "b6f551ddffcd7e423fb9863458ca0980d622235cca49f2382f3a9e2052df469a" },
{ identifier = "cp315t-macosx_x86_64", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b3-macos11.pkg", sha256 = "b6f551ddffcd7e423fb9863458ca0980d622235cca49f2382f3a9e2052df469a" },
{ identifier = "cp315t-macosx_arm64", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b3-macos11.pkg", sha256 = "b6f551ddffcd7e423fb9863458ca0980d622235cca49f2382f3a9e2052df469a" },
{ identifier = "cp315t-macosx_universal2", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b3-macos11.pkg", sha256 = "b6f551ddffcd7e423fb9863458ca0980d622235cca49f2382f3a9e2052df469a" },
{ identifier = "pp39-macosx_x86_64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-macos_x86_64.tar.bz2", sha256 = "fda015431621e7e5aa16359d114f2c45a77ed936992c1efff86302e768a6b21c" },
{ identifier = "pp39-macosx_arm64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-macos_arm64.tar.bz2", sha256 = "88f824e7a2d676440d09bc90fc959ae0fd3557d7e2f14bfbbe53d41d159a47fe" },
{ identifier = "pp310-macosx_x86_64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.19-macos_x86_64.tar.bz2", sha256 = "2c5e5c2a33ac882551d7f28b98d19d486b8995aa50824a73b4edcc6aeec35c63" },
{ identifier = "pp310-macosx_arm64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.19-macos_arm64.tar.bz2", sha256 = "3db8a03fc496164801646844d7f3b12baa0adb3ad9a0b7cb124521bc2e168a36" },
{ identifier = "pp311-macosx_x86_64", version = "3.11", url = "https://downloads.python.org/pypy/pypy3.11-v7.3.23-macos_x86_64.tar.bz2", sha256 = "c95363c4e87235d11a6cec8128239c291b1eb67a752778fbcfe029a71da82b5e" },
{ identifier = "pp311-macosx_arm64", version = "3.11", url = "https://downloads.python.org/pypy/pypy3.11-v7.3.23-macos_arm64.tar.bz2", sha256 = "4747b3aceba4c1c6104cddc0fe5ea302101d32955f0957347b9ecc4fbd7aed05" },
{ identifier = "cp315-macosx_x86_64", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b4-macos11.pkg", sha256 = "6f1ed07cc92ed6e694b38b29d929a4e55190532fddb3828afe68d07cd4bf4aff" },
{ identifier = "cp315-macosx_arm64", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b4-macos11.pkg", sha256 = "6f1ed07cc92ed6e694b38b29d929a4e55190532fddb3828afe68d07cd4bf4aff" },
{ identifier = "cp315-macosx_universal2", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b4-macos11.pkg", sha256 = "6f1ed07cc92ed6e694b38b29d929a4e55190532fddb3828afe68d07cd4bf4aff" },
{ identifier = "cp315t-macosx_x86_64", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b4-macos11.pkg", sha256 = "6f1ed07cc92ed6e694b38b29d929a4e55190532fddb3828afe68d07cd4bf4aff" },
{ identifier = "cp315t-macosx_arm64", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b4-macos11.pkg", sha256 = "6f1ed07cc92ed6e694b38b29d929a4e55190532fddb3828afe68d07cd4bf4aff" },
{ identifier = "cp315t-macosx_universal2", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b4-macos11.pkg", sha256 = "6f1ed07cc92ed6e694b38b29d929a4e55190532fddb3828afe68d07cd4bf4aff" },
{ identifier = "pp39-macosx_x86_64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-macos_x86_64.tar.gz", sha256 = "7ea762a1b0af7545a74cd4260bb3fd2812813deffef2ef8d2fddd5e03fa63ef1" },
{ identifier = "pp39-macosx_arm64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-macos_arm64.tar.gz", sha256 = "b09ce3a865c1c0f4e58c0ee4f70511f1b27dfc1f7148f4b6060cfdfd581c9e82" },
{ identifier = "pp310-macosx_x86_64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.19-macos_x86_64.tar.gz", sha256 = "63f9d30cdd9e47cfe279be941975ac3d24e46c79756cd1d1bd2c551c27d8b32c" },
{ identifier = "pp310-macosx_arm64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.19-macos_arm64.tar.gz", sha256 = "72a74cf645e43608f7d88831581fb0f8e1f963fb38f0793bacd37d5018a9aeb8" },
{ identifier = "pp311-macosx_x86_64", version = "3.11", url = "https://downloads.python.org/pypy/pypy3.11-v7.3.23-macos_x86_64.tar.gz", sha256 = "798279b0f233893ae22754290aedf35a1aea1ec9013a8ad8110f166d85944c91" },
{ identifier = "pp311-macosx_arm64", version = "3.11", url = "https://downloads.python.org/pypy/pypy3.11-v7.3.23-macos_arm64.tar.gz", sha256 = "f837b3c203d60d7e25a31e267671a07ba0c9b9ac8081ad225571fb06fccf1b7b" },
{ identifier = "gp312_250-macosx_x86_64", version = "3.12", url = "https://github.com/oracle/graalpython/releases/download/graal-25.0.1/graalpy-25.0.1-macos-amd64.tar.gz", sha256 = "10b0721d52397f0cc85f038900318da2203711cbcfae7899e3faed49d3dc6221" },
{ identifier = "gp312_250-macosx_arm64", version = "3.12", url = "https://github.com/oracle/graalpython/releases/download/graal-25.0.3/graalpy-25.0.3-macos-aarch64.tar.gz", sha256 = "387d9f5b376860842bea4d55aae5820974f3f3b68fc36c77ae863a061a888857" },
]
@@ -194,10 +194,10 @@ python_configurations = [
{ identifier = "cp314t-win32", version = "3.14.6" },
{ identifier = "cp314-win_amd64", version = "3.14.6" },
{ identifier = "cp314t-win_amd64", version = "3.14.6" },
{ identifier = "cp315-win32", version = "3.15.0-b3" },
{ identifier = "cp315t-win32", version = "3.15.0-b3" },
{ identifier = "cp315-win_amd64", version = "3.15.0-b3" },
{ identifier = "cp315t-win_amd64", version = "3.15.0-b3" },
{ identifier = "cp315-win32", version = "3.15.0-b4" },
{ identifier = "cp315t-win32", version = "3.15.0-b4" },
{ identifier = "cp315-win_amd64", version = "3.15.0-b4" },
{ identifier = "cp315t-win_amd64", version = "3.15.0-b4" },
{ identifier = "cp39-win_arm64", version = "3.9.10" },
{ identifier = "cp310-win_arm64", version = "3.10.11" },
{ identifier = "cp311-win_arm64", version = "3.11.9" },
@@ -205,8 +205,8 @@ python_configurations = [
{ identifier = "cp313-win_arm64", version = "3.13.14" },
{ identifier = "cp314-win_arm64", version = "3.14.6" },
{ identifier = "cp314t-win_arm64", version = "3.14.6" },
{ identifier = "cp315-win_arm64", version = "3.15.0-b3" },
{ identifier = "cp315t-win_arm64", version = "3.15.0-b3" },
{ identifier = "cp315-win_arm64", version = "3.15.0-b4" },
{ identifier = "cp315t-win_arm64", version = "3.15.0-b4" },
{ identifier = "pp39-win_amd64", version = "3.9", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-win64.zip", sha256 = "06ec12a5e964dc0ad33e6f380185a4d295178dce6d6df512f508e7aee00a1323" },
{ identifier = "pp310-win_amd64", version = "3.10", url = "https://downloads.python.org/pypy/pypy3.10-v7.3.19-win64.zip", sha256 = "c0d07bba6c8fb4e5804f4a8b3f8ef07cc3d89f6ad1db42a45ffb9be60bbb7cc2" },
{ identifier = "pp311-win_amd64", version = "3.11", url = "https://downloads.python.org/pypy/pypy3.11-v7.3.23-win64.zip", sha256 = "948b8ea58dea5b9917210fe4afd242c788fbfaba1c3f1a25e696a404f703389a" },
@@ -217,7 +217,7 @@ python_configurations = [
python_configurations = [
{ identifier = "cp312-pyodide_wasm32", version = "3.12", default_pyodide_version = "0.27.7", node_version = "v22", sha256 = "0c2e7db42efa5d1dac38b50f8b3d659a1e3885d0a233494831b8206281307d52" },
{ identifier = "cp313-pyodide_wasm32", version = "3.13", default_pyodide_version = "0.29.4", node_version = "v22", sha256 = "a29fc4a076408a18fc29eb4b280f80c6dddc95c19514c874c29e590d0931c02a" },
{ identifier = "cp314-pyodide_wasm32", version = "3.14", default_pyodide_version = "314.0.1", node_version = "v24", sha256 = "954d7b6bfa5c7cab17757838d66479c9b78fd862b9e664da7711475d0aade13c" },
{ identifier = "cp314-pyodide_wasm32", version = "3.14", default_pyodide_version = "314.0.2", node_version = "v24", sha256 = "01ab1b229bf2031603bf20ad4ceb9c1059ba680b26df7bda2db4748906dfd78a" },
]
[android]
@@ -238,7 +238,7 @@ python_configurations = [
{ identifier = "cp314-ios_arm64_iphoneos", version = "3.14", url = "https://github.com/beeware/Python-Apple-support/releases/download/3.14-b10/Python-3.14-iOS-support.b10.tar.gz", sha256 = "200ef60eb67be0483ceb638daa9048f84f41a9a952707a5ad4c3198037c7b583" },
{ identifier = "cp314-ios_x86_64_iphonesimulator", version = "3.14", url = "https://github.com/beeware/Python-Apple-support/releases/download/3.14-b10/Python-3.14-iOS-support.b10.tar.gz", sha256 = "200ef60eb67be0483ceb638daa9048f84f41a9a952707a5ad4c3198037c7b583" },
{ identifier = "cp314-ios_arm64_iphonesimulator", version = "3.14", url = "https://github.com/beeware/Python-Apple-support/releases/download/3.14-b10/Python-3.14-iOS-support.b10.tar.gz", sha256 = "200ef60eb67be0483ceb638daa9048f84f41a9a952707a5ad4c3198037c7b583" },
{ identifier = "cp315-ios_arm64_iphoneos", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b3-iOS-XCframework.tar.gz", sha256 = "996be6e68380fd7db118c9d7140b75510332a77e040a9043cc44c59ba1696c2c" },
{ identifier = "cp315-ios_x86_64_iphonesimulator", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b3-iOS-XCframework.tar.gz", sha256 = "996be6e68380fd7db118c9d7140b75510332a77e040a9043cc44c59ba1696c2c" },
{ identifier = "cp315-ios_arm64_iphonesimulator", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b3-iOS-XCframework.tar.gz", sha256 = "996be6e68380fd7db118c9d7140b75510332a77e040a9043cc44c59ba1696c2c" },
{ identifier = "cp315-ios_arm64_iphoneos", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b4-iOS-XCframework.tar.gz", sha256 = "dbf1095502e0b4a0dc2a4d96ae1b1d92ee8c0b7bea773862f7124ede0017e3dc" },
{ identifier = "cp315-ios_x86_64_iphonesimulator", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b4-iOS-XCframework.tar.gz", sha256 = "dbf1095502e0b4a0dc2a4d96ae1b1d92ee8c0b7bea773862f7124ede0017e3dc" },
{ identifier = "cp315-ios_arm64_iphonesimulator", version = "3.15", url = "https://www.python.org/ftp/python/3.15.0/python-3.15.0b4-iOS-XCframework.tar.gz", sha256 = "dbf1095502e0b4a0dc2a4d96ae1b1d92ee8c0b7bea773862f7124ede0017e3dc" },
]
@@ -10,7 +10,7 @@ build==1.5.0
# pyodide-build
certifi==2026.6.17
# via requests
charset-normalizer==3.4.7
charset-normalizer==3.4.9
# via requests
click==8.1.8
# via
@@ -19,7 +19,7 @@ click==8.1.8
# pyodide-cli
distlib==0.4.3
# via virtualenv
filelock==3.29.4
filelock==3.31.1
# via
# python-discovery
# virtualenv
@@ -39,7 +39,7 @@ packaging==26.2
# wheel
pip==26.1.2
# via -r .nox/update_constraints/tmp/constraints-pyodide.in
platformdirs==4.10.0
platformdirs==4.10.1
# via
# pyodide-build
# python-discovery
@@ -52,7 +52,7 @@ pydantic-core==2.46.4
# via pydantic
pygments==2.20.0
# via rich
pyodide-build==0.35.1
pyodide-build==0.36.0
# via -r .nox/update_constraints/tmp/constraints-pyodide.in
pyodide-cli==0.5.0
# via
@@ -62,7 +62,7 @@ pyodide-lock==0.1.3
# via pyodide-build
pyproject-hooks==1.2.0
# via build
python-discovery==1.4.2
python-discovery==1.4.4
# via virtualenv
requests==2.34.2
# via pyodide-build
@@ -72,7 +72,7 @@ rich==15.0.0
# pyodide-cli
ruamel-yaml==0.19.1
# via pyodide-build
typing-extensions==4.15.0
typing-extensions==4.16.0
# via
# pydantic
# pydantic-core
@@ -81,7 +81,7 @@ typing-inspection==0.4.2
# via pydantic
urllib3==2.7.0
# via requests
virtualenv==21.5.1
virtualenv==21.6.1
# via
# build
# pyodide-build
@@ -10,7 +10,7 @@ build==1.5.0
# pyodide-build
certifi==2026.6.17
# via requests
charset-normalizer==3.4.7
charset-normalizer==3.4.9
# via requests
click==8.1.8
# via
@@ -19,7 +19,7 @@ click==8.1.8
# pyodide-cli
distlib==0.4.3
# via virtualenv
filelock==3.29.4
filelock==3.31.1
# via
# python-discovery
# virtualenv
@@ -39,7 +39,7 @@ packaging==26.2
# wheel
pip==26.1.2
# via -r .nox/update_constraints/tmp/constraints-pyodide.in
platformdirs==4.10.0
platformdirs==4.10.1
# via
# pyodide-build
# python-discovery
@@ -52,7 +52,7 @@ pydantic-core==2.46.4
# via pydantic
pygments==2.20.0
# via rich
pyodide-build==0.35.1
pyodide-build==0.36.0
# via -r .nox/update_constraints/tmp/constraints-pyodide.in
pyodide-cli==0.5.0
# via
@@ -62,7 +62,7 @@ pyodide-lock==0.1.3
# via pyodide-build
pyproject-hooks==1.2.0
# via build
python-discovery==1.4.2
python-discovery==1.4.4
# via virtualenv
requests==2.34.2
# via pyodide-build
@@ -72,7 +72,7 @@ rich==15.0.0
# pyodide-cli
ruamel-yaml==0.19.1
# via pyodide-build
typing-extensions==4.15.0
typing-extensions==4.16.0
# via
# pydantic
# pydantic-core
@@ -81,7 +81,7 @@ typing-inspection==0.4.2
# via pydantic
urllib3==2.7.0
# via requests
virtualenv==21.5.1
virtualenv==21.6.1
# via
# build
# pyodide-build
@@ -10,7 +10,7 @@ build==1.5.0
# pyodide-build
certifi==2026.6.17
# via requests
charset-normalizer==3.4.7
charset-normalizer==3.4.9
# via requests
click==8.1.8
# via
@@ -19,7 +19,7 @@ click==8.1.8
# pyodide-cli
distlib==0.4.3
# via virtualenv
filelock==3.29.4
filelock==3.31.1
# via
# python-discovery
# virtualenv
@@ -39,7 +39,7 @@ packaging==26.2
# wheel
pip==26.1.2
# via -r .nox/update_constraints/tmp/constraints-pyodide.in
platformdirs==4.10.0
platformdirs==4.10.1
# via
# pyodide-build
# python-discovery
@@ -52,7 +52,7 @@ pydantic-core==2.46.4
# via pydantic
pygments==2.20.0
# via rich
pyodide-build==0.35.1
pyodide-build==0.36.0
# via -r .nox/update_constraints/tmp/constraints-pyodide.in
pyodide-cli==0.5.0
# via
@@ -62,7 +62,7 @@ pyodide-lock==0.1.3
# via pyodide-build
pyproject-hooks==1.2.0
# via build
python-discovery==1.4.2
python-discovery==1.4.4
# via virtualenv
requests==2.34.2
# via pyodide-build
@@ -72,7 +72,7 @@ rich==15.0.0
# pyodide-cli
ruamel-yaml==0.19.1
# via pyodide-build
typing-extensions==4.15.0
typing-extensions==4.16.0
# via
# pydantic
# pydantic-core
@@ -81,7 +81,7 @@ typing-inspection==0.4.2
# via pydantic
urllib3==2.7.0
# via requests
virtualenv==21.5.1
virtualenv==21.6.1
# via
# build
# pyodide-build
@@ -18,7 +18,7 @@ cattrs==26.1.0
# via requests-cache
certifi==2026.6.17
# via requests
charset-normalizer==3.4.7
charset-normalizer==3.4.9
# via requests
delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in
@@ -28,7 +28,7 @@ distlib==0.4.3
# via virtualenv
exceptiongroup==1.3.1
# via cattrs
filelock==3.29.4
filelock==3.31.1
# via
# python-discovery
# virtualenv
@@ -60,9 +60,9 @@ pefile==2024.8.26
# delvewheel
pip==26.1.2
# via -r cibuildwheel/resources/constraints.in
pkgconf==2.5.1.post2
pkgconf==3.0.1.post0
# via -r cibuildwheel/resources/constraints.in
platformdirs==4.10.0
platformdirs==4.10.1
# via
# python-discovery
# requests-cache
@@ -75,19 +75,19 @@ pygments==2.20.0
# via rich
pyproject-hooks==1.2.0
# via build
python-discovery==1.4.2
python-discovery==1.4.4
# via virtualenv
requests==2.34.2
# via
# abi3audit
# requests-cache
requests-cache==1.3.2
requests-cache==1.3.3
# via abi3audit
rich==15.0.0
# via abi3audit
tomli==2.4.1
# via build
typing-extensions==4.15.0
typing-extensions==4.16.0
# via
# cattrs
# delocate
@@ -99,7 +99,7 @@ urllib3==2.7.0
# via
# requests
# requests-cache
virtualenv==21.5.1
virtualenv==21.6.1
# via -r cibuildwheel/resources/constraints.in
zipp==4.1.0
# via importlib-metadata
@@ -18,7 +18,7 @@ cattrs==26.1.0
# via requests-cache
certifi==2026.6.17
# via requests
charset-normalizer==3.4.7
charset-normalizer==3.4.9
# via requests
delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in
@@ -26,7 +26,7 @@ delvewheel==1.13.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.4.3
# via virtualenv
filelock==3.29.4
filelock==3.31.1
# via
# python-discovery
# virtualenv
@@ -54,12 +54,11 @@ pefile==2024.8.26
# via
# abi3audit
# delvewheel
pip==26.1.2; implementation_name != "graalpy" or platform_system != "Windows"
pip==26.0.1; implementation_name == "graalpy" and platform_system == "Windows"
pip==26.1.2
# via -r cibuildwheel/resources/constraints.in
pkgconf==2.5.1.post2
pkgconf==3.0.1.post0
# via -r cibuildwheel/resources/constraints.in
platformdirs==4.10.0
platformdirs==4.10.1
# via
# python-discovery
# requests-cache
@@ -72,17 +71,17 @@ pygments==2.20.0
# via rich
pyproject-hooks==1.2.0
# via build
python-discovery==1.4.2
python-discovery==1.4.4
# via virtualenv
requests==2.34.2
# via
# abi3audit
# requests-cache
requests-cache==1.3.2
requests-cache==1.3.3
# via abi3audit
rich==15.0.0
# via abi3audit
typing-extensions==4.15.0
typing-extensions==4.16.0
# via
# cattrs
# delocate
@@ -92,5 +91,5 @@ urllib3==2.7.0
# via
# requests
# requests-cache
virtualenv==21.5.1
virtualenv==21.6.1
# via -r cibuildwheel/resources/constraints.in
@@ -18,7 +18,7 @@ cattrs==26.1.0
# via requests-cache
certifi==2026.6.17
# via requests
charset-normalizer==3.4.7
charset-normalizer==3.4.9
# via requests
delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in
@@ -26,7 +26,8 @@ delvewheel==1.13.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.4.3
# via virtualenv
filelock==3.29.4
filelock==3.31.1; implementation_name != "graalpy"
filelock==3.29.7; implementation_name == "graalpy"
# via
# python-discovery
# virtualenv
@@ -57,9 +58,9 @@ pefile==2024.8.26
pip==26.1.2; implementation_name != "graalpy" or platform_system != "Windows"
pip==26.0.1; implementation_name == "graalpy" and platform_system == "Windows"
# via -r cibuildwheel/resources/constraints.in
pkgconf==2.5.1.post2
pkgconf==3.0.1.post0
# via -r cibuildwheel/resources/constraints.in
platformdirs==4.10.0
platformdirs==4.10.1
# via
# python-discovery
# requests-cache
@@ -72,17 +73,17 @@ pygments==2.20.0
# via rich
pyproject-hooks==1.2.0
# via build
python-discovery==1.4.2
python-discovery==1.4.4
# via virtualenv
requests==2.34.2
# via
# abi3audit
# requests-cache
requests-cache==1.3.2
requests-cache==1.3.3
# via abi3audit
rich==15.0.0
# via abi3audit
typing-extensions==4.15.0
typing-extensions==4.16.0
# via
# cattrs
# delocate
@@ -92,5 +93,5 @@ urllib3==2.7.0
# via
# requests
# requests-cache
virtualenv==21.5.1
virtualenv==21.6.1
# via -r cibuildwheel/resources/constraints.in
@@ -18,7 +18,7 @@ cattrs==26.1.0
# via requests-cache
certifi==2026.6.17
# via requests
charset-normalizer==3.4.7
charset-normalizer==3.4.9
# via requests
delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in
@@ -26,7 +26,7 @@ delvewheel==1.13.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.4.3
# via virtualenv
filelock==3.29.4
filelock==3.31.1
# via
# python-discovery
# virtualenv
@@ -56,9 +56,9 @@ pefile==2024.8.26
# delvewheel
pip==26.1.2
# via -r cibuildwheel/resources/constraints.in
pkgconf==2.5.1.post2
pkgconf==3.0.1.post0
# via -r cibuildwheel/resources/constraints.in
platformdirs==4.10.0
platformdirs==4.10.1
# via
# python-discovery
# requests-cache
@@ -71,17 +71,17 @@ pygments==2.20.0
# via rich
pyproject-hooks==1.2.0
# via build
python-discovery==1.4.2
python-discovery==1.4.4
# via virtualenv
requests==2.34.2
# via
# abi3audit
# requests-cache
requests-cache==1.3.2
requests-cache==1.3.3
# via abi3audit
rich==15.0.0
# via abi3audit
typing-extensions==4.15.0
typing-extensions==4.16.0
# via
# cattrs
# delocate
@@ -91,5 +91,5 @@ urllib3==2.7.0
# via
# requests
# requests-cache
virtualenv==21.5.1
virtualenv==21.6.1
# via -r cibuildwheel/resources/constraints.in
@@ -18,7 +18,7 @@ cattrs==26.1.0
# via requests-cache
certifi==2026.6.17
# via requests
charset-normalizer==3.4.7
charset-normalizer==3.4.9
# via requests
delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in
@@ -26,7 +26,7 @@ delvewheel==1.13.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.4.3
# via virtualenv
filelock==3.29.4
filelock==3.31.1
# via
# python-discovery
# virtualenv
@@ -56,9 +56,9 @@ pefile==2024.8.26
# delvewheel
pip==26.1.2
# via -r cibuildwheel/resources/constraints.in
pkgconf==2.5.1.post2
pkgconf==3.0.1.post0
# via -r cibuildwheel/resources/constraints.in
platformdirs==4.10.0
platformdirs==4.10.1
# via
# python-discovery
# requests-cache
@@ -71,17 +71,17 @@ pygments==2.20.0
# via rich
pyproject-hooks==1.2.0
# via build
python-discovery==1.4.2
python-discovery==1.4.4
# via virtualenv
requests==2.34.2
# via
# abi3audit
# requests-cache
requests-cache==1.3.2
requests-cache==1.3.3
# via abi3audit
rich==15.0.0
# via abi3audit
typing-extensions==4.15.0
typing-extensions==4.16.0
# via
# cattrs
# delocate
@@ -91,5 +91,5 @@ urllib3==2.7.0
# via
# requests
# requests-cache
virtualenv==21.5.1
virtualenv==21.6.1
# via -r cibuildwheel/resources/constraints.in
@@ -18,7 +18,7 @@ cattrs==26.1.0
# via requests-cache
certifi==2026.6.17
# via requests
charset-normalizer==3.4.7
charset-normalizer==3.4.9
# via requests
delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in
@@ -26,7 +26,7 @@ delvewheel==1.13.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.4.3
# via virtualenv
filelock==3.29.4
filelock==3.31.1
# via
# python-discovery
# virtualenv
@@ -56,9 +56,9 @@ pefile==2024.8.26
# delvewheel
pip==26.1.2
# via -r cibuildwheel/resources/constraints.in
pkgconf==2.5.1.post2
pkgconf==3.0.1.post0
# via -r cibuildwheel/resources/constraints.in
platformdirs==4.10.0
platformdirs==4.10.1
# via
# python-discovery
# requests-cache
@@ -71,17 +71,17 @@ pygments==2.20.0
# via rich
pyproject-hooks==1.2.0
# via build
python-discovery==1.4.2
python-discovery==1.4.4
# via virtualenv
requests==2.34.2
# via
# abi3audit
# requests-cache
requests-cache==1.3.2
requests-cache==1.3.3
# via abi3audit
rich==15.0.0
# via abi3audit
typing-extensions==4.15.0
typing-extensions==4.16.0
# via
# cattrs
# delocate
@@ -91,5 +91,5 @@ urllib3==2.7.0
# via
# requests
# requests-cache
virtualenv==21.5.1
virtualenv==21.6.1
# via -r cibuildwheel/resources/constraints.in
@@ -18,7 +18,7 @@ cattrs==25.3.0
# via requests-cache
certifi==2026.6.17
# via requests
charset-normalizer==3.4.7
charset-normalizer==3.4.9
# via requests
delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in
@@ -77,7 +77,7 @@ pygments==2.20.0
# via rich
pyproject-hooks==1.2.0
# via build
python-discovery==1.4.2
python-discovery==1.4.4
# via virtualenv
requests==2.32.5
# via
@@ -89,7 +89,7 @@ rich==14.2.0
# via abi3audit
tomli==2.4.1
# via build
typing-extensions==4.15.0
typing-extensions==4.16.0
# via
# cattrs
# delocate
@@ -101,7 +101,7 @@ urllib3==2.6.3
# via
# requests
# requests-cache
virtualenv==21.5.1
virtualenv==21.6.1
# via -r cibuildwheel/resources/constraints.in
zipp==3.23.1
# via importlib-metadata
+8 -8
View File
@@ -18,7 +18,7 @@ cattrs==26.1.0
# via requests-cache
certifi==2026.6.17
# via requests
charset-normalizer==3.4.7
charset-normalizer==3.4.9
# via requests
delocate==0.13.0
# via -r cibuildwheel/resources/constraints.in
@@ -26,7 +26,7 @@ delvewheel==1.13.0
# via -r cibuildwheel/resources/constraints.in
distlib==0.4.3
# via virtualenv
filelock==3.29.4
filelock==3.31.1
# via
# python-discovery
# virtualenv
@@ -56,9 +56,9 @@ pefile==2024.8.26
# delvewheel
pip==26.1.2
# via -r cibuildwheel/resources/constraints.in
pkgconf==2.5.1.post2
pkgconf==3.0.1.post0
# via -r cibuildwheel/resources/constraints.in
platformdirs==4.10.0
platformdirs==4.10.1
# via
# python-discovery
# requests-cache
@@ -71,17 +71,17 @@ pygments==2.20.0
# via rich
pyproject-hooks==1.2.0
# via build
python-discovery==1.4.2
python-discovery==1.4.4
# via virtualenv
requests==2.34.2
# via
# abi3audit
# requests-cache
requests-cache==1.3.2
requests-cache==1.3.3
# via abi3audit
rich==15.0.0
# via abi3audit
typing-extensions==4.15.0
typing-extensions==4.16.0
# via
# cattrs
# delocate
@@ -91,5 +91,5 @@ urllib3==2.7.0
# via
# requests
# requests-cache
virtualenv==21.5.1
virtualenv==21.6.1
# via -r cibuildwheel/resources/constraints.in
+34 -34
View File
@@ -1,54 +1,54 @@
[x86_64]
manylinux2014 = quay.io/pypa/manylinux2014_x86_64@sha256:145e7cf607255ebf456c77ce6be401406c354e093438e47ba16cc5066d0e50ee # 2026.06.28-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64@sha256:35795c40ab9eed587a0f51a752c7defeabcc8a2ccd434d3497be201cdd34cb63 # 2026.06.28-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64@sha256:0993ba2960d39c254073568c1ebaba883960c639eb81b41cbaab952e334cae7d # 2026.06.28-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64@sha256:91a95e8d63ff1e2bd64f2c1e41178037020a79882ba2c8f96eeac4d1d1b1b129 # 2026.06.28-1
manylinux2014 = quay.io/pypa/manylinux2014_x86_64@sha256:0d25b049964b2549b83384036abdff06789a8c0b1e9ff003ec80f0d531f79e50 # 2026.07.19-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64@sha256:a61875a2f84cab7df8de222ff12cabc08ff86eb4ad402ac90ba7bdaed9600cca # 2026.07.19-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64@sha256:b6e1f264da7bf4e8db3e6a625ea1ecaf1e52290253df8588f71e4a9e50a85a17 # 2026.07.19-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_x86_64@sha256:fd0694e23637ae8d13433c58f647aba1aae5de4fd50350201307be453a8b2ff4 # 2026.07.19-1
[i686]
manylinux2014 = quay.io/pypa/manylinux2014_i686@sha256:5c0994eabfa73d99dccd0c0a18d12a5aff5ffbef1a60ba73afbf10272968127f # 2026.06.28-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686@sha256:f02d63a9745c2f582513da479f830360be51ee1f70abd16a8ce60a0b2999bd21 # 2026.06.28-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686@sha256:ea14a36fa92b873e78d57c540bed855b27f35823f4b6971a6e01947195dd8c51 # 2026.06.28-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686@sha256:7b7e7acc718190aca5509f6c9fa8809039722464bd51fbf097aa22967ecfc10a # 2026.06.28-1
manylinux2014 = quay.io/pypa/manylinux2014_i686@sha256:9833ed0665e4bd2aceeda6f7ea81b69c75a941464b659edf62c98aa63526d1ba # 2026.07.19-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686@sha256:3a4de216ae551c1cbb8f93d4bbf9faebe7fb16a67afa3380b9a3ed2cc7b80fcf # 2026.07.19-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686@sha256:1fc55618156152a6570991a6ee81038fd507b48c41cbdede495931146b074869 # 2026.07.19-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_i686@sha256:a85be8fc5aa7fa291b8bee5647469d3d48dd26600cc7295553ff47ca60906ff2 # 2026.07.19-1
[aarch64]
manylinux2014 = quay.io/pypa/manylinux2014_aarch64@sha256:1981574293d5268f6384f466e33e90d8df498841ac5babc3d6f943d1ba81b7ed # 2026.06.28-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64@sha256:1aa721f140a4e88caf74e375992e4d79a1f991dc799a968de237752ce073a01b # 2026.06.28-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64@sha256:6c73cd226c9c664f31a8903d35a19b10b533d429801449fe3575917682a01caa # 2026.06.28-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64@sha256:b86ad8b6d96272009e0140b8cdd092debefb22588450968c41b773352daa27f1 # 2026.06.28-1
manylinux2014 = quay.io/pypa/manylinux2014_aarch64@sha256:ae34a6ceeefe0b535c525b2e96f297311c8f1e01cfd8b9be5f647eece5b5c60b # 2026.07.19-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64@sha256:162c81dfd3efc710732a571717d3c916a6945ebf279e879ddee3243af96fe46f # 2026.07.19-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64@sha256:ae032906c631ad572a91bcc9545023d327822912957ae85a57c85181836662b6 # 2026.07.19-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_aarch64@sha256:e6ac3eca5f7d2cd5b8267b94b65d9a693e7ba06f5ba4c6643b1b0e6f9ae2cde3 # 2026.07.19-1
[ppc64le]
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le@sha256:80b8c8249c174ce2168dde26bf4b3ba7c8f5557b5e639834b9e7f78f1b1482b1 # 2026.06.28-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le@sha256:dd904df86e600924666e8fe04e9c9ecb31ce99a71d6b9a90ea79a5f9ceb8cb00 # 2026.06.28-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_ppc64le@sha256:a4da6d94e7c26280dc8c9bac75188584334f44d93207888bd8a1bc342b021ef1 # 2026.06.28-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le@sha256:4848166e96a6fcda23b1945dc58aa6a5dea083fa63d77c4281d676dec8a5c069 # 2026.06.28-1
manylinux2014 = quay.io/pypa/manylinux2014_ppc64le@sha256:7e311ceece0fd3faa54a8539fb0b7906ee2ac068ecc39095e48ed1097312eaa0 # 2026.07.19-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_ppc64le@sha256:32ec597dd87e27980750115a6c020cae54fd17386e18d86d695e35e6b3a3e0da # 2026.07.19-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_ppc64le@sha256:7f649dea6f31fbc4ca6d665e78e87a192b55e739c44ed9965129956be77c4e3d # 2026.07.19-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_ppc64le@sha256:d59ad21615cf5b83cc9046cf7c44d07e8ef1247333e8a72147d7c781008605c1 # 2026.07.19-1
[s390x]
manylinux2014 = quay.io/pypa/manylinux2014_s390x@sha256:91e354b553e4d1009e9eed871453afa8a65df5d82d928b5f53a9c8464987c770 # 2026.06.28-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x@sha256:24a5bba87ed302d01243e5e0adbf6afccb458075a840dcff1fefc9980b9bdcd5 # 2026.06.28-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_s390x@sha256:ed607cbc388da30719ab6d1fbace45e5df843fd3cb488d9c1cd90a5f163f607a # 2026.06.28-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x@sha256:d4a232889cae02e79565d9d2277276abca8cba27c9d1c887a13138f06c3b3a7b # 2026.06.28-1
manylinux2014 = quay.io/pypa/manylinux2014_s390x@sha256:e392818123219665c259c9a5e389cecd978918dc279fe8e3542864f1067b9cdb # 2026.07.19-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_s390x@sha256:9c4f347bc43b1b799a296f6801a8845af132fa6f919cc6237b889c8d2e16ae01 # 2026.07.19-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_s390x@sha256:37fe79ec71fed0eaa4d6edfb22244699877e3cd92a2ca4679bf9e4fd5f45c61d # 2026.07.19-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_s390x@sha256:e29d28c68a0bd4594fd41cb2435ca64388038b05c24e77b34f186ff90a2968c4 # 2026.07.19-1
[pypy_x86_64]
manylinux2014 = quay.io/pypa/manylinux2014_x86_64@sha256:145e7cf607255ebf456c77ce6be401406c354e093438e47ba16cc5066d0e50ee # 2026.06.28-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64@sha256:35795c40ab9eed587a0f51a752c7defeabcc8a2ccd434d3497be201cdd34cb63 # 2026.06.28-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64@sha256:0993ba2960d39c254073568c1ebaba883960c639eb81b41cbaab952e334cae7d # 2026.06.28-1
manylinux2014 = quay.io/pypa/manylinux2014_x86_64@sha256:0d25b049964b2549b83384036abdff06789a8c0b1e9ff003ec80f0d531f79e50 # 2026.07.19-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_x86_64@sha256:a61875a2f84cab7df8de222ff12cabc08ff86eb4ad402ac90ba7bdaed9600cca # 2026.07.19-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_x86_64@sha256:b6e1f264da7bf4e8db3e6a625ea1ecaf1e52290253df8588f71e4a9e50a85a17 # 2026.07.19-1
[pypy_i686]
manylinux2014 = quay.io/pypa/manylinux2014_i686@sha256:5c0994eabfa73d99dccd0c0a18d12a5aff5ffbef1a60ba73afbf10272968127f # 2026.06.28-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686@sha256:f02d63a9745c2f582513da479f830360be51ee1f70abd16a8ce60a0b2999bd21 # 2026.06.28-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686@sha256:ea14a36fa92b873e78d57c540bed855b27f35823f4b6971a6e01947195dd8c51 # 2026.06.28-1
manylinux2014 = quay.io/pypa/manylinux2014_i686@sha256:9833ed0665e4bd2aceeda6f7ea81b69c75a941464b659edf62c98aa63526d1ba # 2026.07.19-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_i686@sha256:3a4de216ae551c1cbb8f93d4bbf9faebe7fb16a67afa3380b9a3ed2cc7b80fcf # 2026.07.19-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_i686@sha256:1fc55618156152a6570991a6ee81038fd507b48c41cbdede495931146b074869 # 2026.07.19-1
[pypy_aarch64]
manylinux2014 = quay.io/pypa/manylinux2014_aarch64@sha256:1981574293d5268f6384f466e33e90d8df498841ac5babc3d6f943d1ba81b7ed # 2026.06.28-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64@sha256:1aa721f140a4e88caf74e375992e4d79a1f991dc799a968de237752ce073a01b # 2026.06.28-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64@sha256:6c73cd226c9c664f31a8903d35a19b10b533d429801449fe3575917682a01caa # 2026.06.28-1
manylinux2014 = quay.io/pypa/manylinux2014_aarch64@sha256:ae34a6ceeefe0b535c525b2e96f297311c8f1e01cfd8b9be5f647eece5b5c60b # 2026.07.19-1
manylinux_2_28 = quay.io/pypa/manylinux_2_28_aarch64@sha256:162c81dfd3efc710732a571717d3c916a6945ebf279e879ddee3243af96fe46f # 2026.07.19-1
manylinux_2_34 = quay.io/pypa/manylinux_2_34_aarch64@sha256:ae032906c631ad572a91bcc9545023d327822912957ae85a57c85181836662b6 # 2026.07.19-1
[armv7l]
manylinux_2_31 = quay.io/pypa/manylinux_2_31_armv7l@sha256:0c0fa43419905afcc4f709c9c3c403ae778d0b4e915a7c9ecf737305b02a282f # 2026.06.28-1
manylinux_2_35 = quay.io/pypa/manylinux_2_35_armv7l@sha256:aafd3c0b3ed84128b9c0e1da876adea4e600feae6f5b30a8f36240c1301e2205 # 2026.06.28-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l@sha256:8cbbfaf3c717ac15ebffd81c06e86f6a37b4477d3046cd5bb37ce8d8b9879a00 # 2026.06.28-1
manylinux_2_31 = quay.io/pypa/manylinux_2_31_armv7l@sha256:a58ece566251a37b3b4cd17d7ef85d88df05f80670c7dfe80c1b1ffe4cd00bf8 # 2026.07.19-1
manylinux_2_35 = quay.io/pypa/manylinux_2_35_armv7l@sha256:c8dba9616907a810e2668afb88153bf47a84422933733dbf4ea7b561af5e8d1e # 2026.07.19-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_armv7l@sha256:d87cbc211df71486a6a90fb2bece474166f3e2dcf81bbfc4be07607fd64185b0 # 2026.07.19-1
[riscv64]
manylinux_2_39 = quay.io/pypa/manylinux_2_39_riscv64@sha256:4d857c572e12dae8752561b7c4a4421929eae56665466577c44b9bb6a8453e07 # 2026.06.28-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_riscv64@sha256:69954353b60d8b409fa222bc9599f1bbb7bbccad490b7367745fd918a35254c0 # 2026.06.28-1
manylinux_2_39 = quay.io/pypa/manylinux_2_39_riscv64@sha256:04b3acc69a6cebb10ac1252587d202acce6445d91c783d3f92229bb2b2483069 # 2026.07.19-1
musllinux_1_2 = quay.io/pypa/musllinux_1_2_riscv64@sha256:2d36623ffc59785e124ecf2992456847baaf2f2e0a87e64d23f2f6a69e5a0357 # 2026.07.19-1
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1 +1 @@
default = { version = "21.5.1", url = "https://github.com/pypa/get-virtualenv/releases/download/21.5.1/virtualenv.pyz", sha256 = "25a5843958f3c1085e871e5fe59959d02b4da1e3ec7abf74dbd9b77ff2ae8d6a" }
default = { version = "21.6.1", url = "https://github.com/pypa/get-virtualenv/releases/download/21.6.1/virtualenv.pyz", sha256 = "32490c6eea415c3a8f44ee112bbef07bc7b70a0aba706672240c6c66d4f7d9cc" }
+12 -12
View File
@@ -48,9 +48,9 @@ ref: working-examples
| [Implicit][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes GPU support for linux wheels |
| [vispy][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Main repository for Vispy |
| [coverage.py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The coverage tool for Python |
| [Line Profiler][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Line-by-line profiling for Python |
| [PyCryptodome][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A self-contained cryptographic library for Python |
| [PyAV][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Pythonic bindings for FFmpeg's libraries. |
| [PyCryptodome][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | A self-contained cryptographic library for Python |
| [Line Profiler][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Line-by-line profiling for Python |
| [PyYAML][] | ![github icon][] | ![apple icon][] | Canonical source repository for PyYAML |
| [pikepdf][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A Python library for reading and writing PDF, powered by QPDF |
| [numexpr][] | ![github icon][] ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Fast numerical array expression evaluator for Python, NumPy, Pandas, PyTables and more |
@@ -77,8 +77,8 @@ ref: working-examples
| [pybind11 cmake_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![pyodide icon][] | Example pybind11 module built with a CMake-based build system |
| [KDEpy][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Kernel Density Estimation in Python |
| [dd-trace-py][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Uses custom alternate arch emulation on GitHub |
| [tgcalls][] | ![github icon][] | ![apple icon][] ![windows icon][] | Python `pybind11` binding to Telegram's WebRTC library with third party dependencies like `OpenSSL`, `MozJPEG`, `FFmpeg`, etc. |
| [sourmash][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] ![pyodide icon][] | Quickly search, compare, and analyze genomic and metagenomic data sets. |
| [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][] ![pyodide icon][] | Example pybind11 module built with a Python-based build system |
| [Confluent client for Kafka][] | ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | setup in `tools/wheels/build-wheels.bat` |
@@ -92,8 +92,8 @@ ref: working-examples
| [pillow-heif][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Bindings to libheif library with third party dependencies. Fully automated CI for tests and publishing including Apple Silicon builds. |
| [keyvi][] | ![github icon][] | ![linux icon][] ![apple icon][] | FST based key value index highly optimized for size and lookup performance, utilizes ccache action for improved runtime |
| [PyGLM][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Fast OpenGL Mathematics (GLM) for Python |
| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 |
| [power-grid-model][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Python/C++ library for distribution power system analysis |
| [iDynTree][] | ![github icon][] | ![linux icon][] | Uses manylinux_2_24 |
| [TgCrypto][] | ![travisci icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Includes a Windows Travis build. |
| [streaming-form-data][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Streaming parser for multipart/form-data written in Cython |
| [Imagecodecs (fork)][] | ![azurepipelines icon][] | ![apple icon][] ![linux icon][] | Over 20 external dependencies in compiled libraries, custom docker image, `libomp`, `openblas` and `install_name_tool` for macOS. |
@@ -102,16 +102,16 @@ ref: working-examples
| [bx-python][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | A library that includes Cython extensions. |
| [Python-WebRTC][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | a Python extension that provides bindings to WebRTC M92 |
| [pybind11 scikit_build_example][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] ![pyodide icon][] | An example combining scikit-build and pybind11 |
| [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms |
| [Arbor][] | ![github icon][] | ![apple icon][] ![linux icon][] | Arbor is a multi-compartment neuron simulation library; compatible with next-generation accelerators; best-practices applied to research software; focused on community-driven development. Includes a [small script](https://github.com/arbor-sim/arbor/blob/master/scripts/patchwheel.py) patching `rpath` in bundled libraries. |
| [fathon][] | ![travisci icon][] | ![apple icon][] ![linux icon][] | python package for DFA (Detrended Fluctuation Analysis) and related algorithms |
| [clang-format][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Scikit-build wrapper around LLVM's CMake, all platforms, generic wheels. |
| [polaroid][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Full range of wheels for setuptools rust, with auto release and PyPI deploy. |
| [ninja][] | ![github icon][] ![travisci icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Multitagged binary builds for all supported platforms, using cibw 2 config configuration. |
| [cf-units][] | ![github icon][] | ![apple icon][] ![linux icon][] | Units of measure as required by the Climate and Forecast (CF) Metadata Conventions |
| [etebase-py][] | ![travisci icon][] | ![linux icon][] | Python bindings to a Rust library using `setuptools-rust`, and `sccache` for improved speed. |
| [SiPM][] | ![github icon][] | ![apple icon][] ![linux icon][] | High performance library for SiPM detectors simulation using C++17, OpenMP and AVX2 intrinsics. |
| [aalink][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Async Python interface for Ableton Link. |
| [numpythia][] | ![github icon][] | ![apple icon][] ![linux icon][] | The interface between PYTHIA and NumPy |
| [aalink][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | Async Python interface for Ableton Link. |
| [pyjet][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | The interface between FastJet and NumPy |
| [ril][] | ![github icon][] | ![windows icon][] ![apple icon][] ![linux icon][] | A python binding to Rust Imaging library using maturin and Pyo3, utilizes Github Action cache to improve speed. Builds abi3 wheels. |
| [GSD][] | ![github icon][] | ![apple icon][] ![linux icon][] ![windows icon][] | Cython and NumPy project with 64-bit wheels. |
@@ -159,9 +159,9 @@ ref: working-examples
[Implicit]: https://github.com/benfred/implicit
[vispy]: https://github.com/vispy/vispy
[coverage.py]: https://github.com/nedbat/coveragepy
[Line Profiler]: https://github.com/pyutils/line_profiler
[PyCryptodome]: https://github.com/Legrandin/pycryptodome
[PyAV]: https://github.com/PyAV-Org/PyAV
[PyCryptodome]: https://github.com/Legrandin/pycryptodome
[Line Profiler]: https://github.com/pyutils/line_profiler
[PyYAML]: https://github.com/yaml/pyyaml
[pikepdf]: https://github.com/pikepdf/pikepdf
[numexpr]: https://github.com/pydata/numexpr
@@ -188,8 +188,8 @@ ref: working-examples
[pybind11 cmake_example]: https://github.com/pybind/cmake_example
[KDEpy]: https://github.com/tommyod/KDEpy
[dd-trace-py]: https://github.com/DataDog/dd-trace-py
[tgcalls]: https://github.com/MarshalX/tgcalls
[sourmash]: https://github.com/sourmash-bio/sourmash
[tgcalls]: https://github.com/MarshalX/tgcalls
[python-rapidjson]: https://github.com/python-rapidjson/python-rapidjson
[pybind11 python_example]: https://github.com/pybind/python_example
[Confluent client for Kafka]: https://github.com/confluentinc/confluent-kafka-python
@@ -203,8 +203,8 @@ ref: working-examples
[pillow-heif]: https://github.com/bigcat88/pillow_heif
[keyvi]: https://github.com/KeyviDev/keyvi
[PyGLM]: https://github.com/Zuzu-Typ/PyGLM
[iDynTree]: https://github.com/robotology/idyntree
[power-grid-model]: https://github.com/PowerGridModel/power-grid-model
[iDynTree]: https://github.com/robotology/idyntree
[TgCrypto]: https://github.com/pyrogram/tgcrypto
[streaming-form-data]: https://github.com/siddhantgoel/streaming-form-data
[Imagecodecs (fork)]: https://github.com/czaki/imagecodecs_build
@@ -213,16 +213,16 @@ ref: working-examples
[bx-python]: https://github.com/bxlab/bx-python
[Python-WebRTC]: https://github.com/MarshalX/python-webrtc
[pybind11 scikit_build_example]: https://github.com/pybind/scikit_build_example
[fathon]: https://github.com/stfbnc/fathon
[Arbor]: https://github.com/arbor-sim/arbor
[fathon]: https://github.com/stfbnc/fathon
[clang-format]: https://github.com/ssciwr/clang-format-wheel
[polaroid]: https://github.com/daggy1234/polaroid
[ninja]: https://github.com/scikit-build/ninja-python-distributions
[cf-units]: https://github.com/SciTools/cf-units
[etebase-py]: https://github.com/etesync/etebase-py
[SiPM]: https://github.com/EdoPro98/SimSiPM
[aalink]: https://github.com/artfwo/aalink
[numpythia]: https://github.com/scikit-hep/numpythia
[aalink]: https://github.com/artfwo/aalink
[pyjet]: https://github.com/scikit-hep/pyjet
[ril]: https://github.com/Cryptex-github/ril-py
[GSD]: https://github.com/glotzerlab/gsd
+53 -1
View File
@@ -16,9 +16,11 @@ See sessions with `nox -l`
"""
import os
import re
import shutil
import sys
from pathlib import Path
from typing import Any
import nox
@@ -63,6 +65,52 @@ def tests(session: nox.Session) -> None:
session.run("pytest", "test", "-x", "--durations", "0", "--timeout=2400", "test")
# Packages held back for GraalPy until upstream fixes land. uv pip compile
# can't express a per-implementation split, so the compiled pin is patched:
# GraalPy (matching `graalpy_marker`) gets `held`, everything else
# (`other_marker`) tracks the freshly compiled version.
GRAALPY_HELD_BACK = (
# Newer pip breaks GraalPy on Windows.
{
"package": "pip",
"held": "26.0.1",
"graalpy_marker": 'implementation_name == "graalpy" and platform_system == "Windows"',
"other_marker": 'implementation_name != "graalpy" or platform_system != "Windows"',
},
# filelock >=3.30 imports errno.ENOTSUP, which GraalPy lacks (fix due ~2026-08).
{
"package": "filelock",
"held": "3.29.7",
"graalpy_marker": 'implementation_name == "graalpy"',
"other_marker": 'implementation_name != "graalpy"',
},
)
def _pin_graalpy_workarounds(output_file: Path) -> None:
text = output_file.read_text()
for pin in GRAALPY_HELD_BACK:
package = re.escape(pin["package"])
text = re.sub(
rf"^{package}==(?P<version>[^\s;]+)$",
f"{pin['package']}==\\g<version>; {pin['other_marker']}\n"
f"{pin['package']}=={pin['held']}; {pin['graalpy_marker']}",
text,
flags=re.MULTILINE,
)
output_file.write_text(text)
def _graalpy_python_versions(build_platforms: dict[str, Any]) -> set[str]:
"""Python minor versions (e.g. "3.12") that ship a GraalPy configuration."""
return {
".".join(config["version"].split(".")[:2])
for platform in build_platforms.values()
for config in platform["python_configurations"]
if config["identifier"].startswith("gp")
}
@nox.session(default=False, tags=["update"])
def update_constraints(session: nox.Session) -> None:
"""
@@ -79,6 +127,9 @@ def update_constraints(session: nox.Session) -> None:
env = os.environ.copy()
env["UV_CUSTOM_COMPILE_COMMAND"] = f"nox -s {session.name}"
build_platforms = nox.project.load_toml(resources / "build-platforms.toml")
graalpy_versions = _graalpy_python_versions(build_platforms)
for minor_version in range(9, 16):
python_version = f"3.{minor_version}"
output_file = resources / f"constraints-python{python_version.replace('.', '')}.txt"
@@ -92,13 +143,14 @@ def update_constraints(session: nox.Session) -> None:
f"--output-file={output_file}",
env=env,
)
if python_version in graalpy_versions:
_pin_graalpy_workarounds(output_file)
shutil.copyfile(
resources / "constraints-python315.txt",
resources / "constraints.txt",
)
build_platforms = nox.project.load_toml(resources / "build-platforms.toml")
pyodides = build_platforms["pyodide"]["python_configurations"]
for pyodide in pyodides:
python_version = ".".join(pyodide["version"].split(".")[:2])