Skip to main content

uv-wheel-download

A pip-free replacement for the pip download step in our Azure pipelines. It reads uv.lock, downloads every pinned wheel (sdist only if no wheel fits) into a folder, and writes a requirements.txt that installs from that folder only.

# before: uv export + pip download + PowerShell "Adjust requirements.txt"
- script: uvx --from git+https://github.com/bmsuisse/uv-wheel-download uv-wheel-download -d _dependencies -r requirements.txt
  displayName: Download dependencies
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken) # for the private BMS feed; ~/.netrc works too

Result: _dependencies/*.whl and a requirements.txt starting with --no-index / --find-links _dependencies, followed by the usual uv export --no-hashes content.

How it works

  1. uv export --frozen --format pylock.toml gives all files in uv.lock with URL and sha256 (--frozen: the lock is trusted as is, no re-resolve; pass --locked after -- to have uv verify it instead).
  2. The target interpreter (--python, default uv python find in the project) is run directly to get its markers and compatible wheel tags (no index or network access needed), and one file per package is picked (marker-excluded packages are skipped).
  3. Files are fetched in parallel, sha256-verified, and kept in <uv cache dir>/wheel-download/<sha256>/. Whatever already persists UV_CACHE_DIR between runs also persists the wheels, and a hit costs no network. They are then hard-linked into the destination.

uv's own cache only holds unpacked archives, not .whl files, so it can't be reused directly; this store lives next to it and follows UV_CACHE_DIR.

Auth: SYSTEM_ACCESSTOKEN is sent as VssSessionToken:<token> to https://pkgs.dev.azure.com only; any other host (or Azure without the variable) uses ~/.netrc.

Local/editable packages (workspace members, -e .) are not downloaded; they stay in requirements.txt as uv exports them.

Options

uv-wheel-download [-d DEST] [-r REQUIREMENTS | --no-requirements] [--project DIR] [--python PY] [-j N] [-- <uv export args>]

Everything after -- goes to uv export, e.g. -- --package mdmapp or -- --group build. --no-dev is added unless you choose groups yourself (--dev, --only-dev, --all-groups, ...).

Development

just install, then just test-all (ruff, ty, pytest).

Metadata

Release files for uv-wheel-download 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for uv-wheel-download 0.1.0
File Size Uploaded Provenance Actions
uv_wheel_download-0.1.0.tar.gz 33.3 kB With provenance Details for uv_wheel_download-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for uv-wheel-download 0.1.0
File Interpreter ABI Platform Actions
uv_wheel_download-0.1.0-py3-none-any.whl Python 3 none any Details for uv_wheel_download-0.1.0-py3-none-any.whl

Total release size: 42.4 kB

Release files / uv_wheel_download-0.1.0.tar.gz

Download URL uv_wheel_download-0.1.0.tar.gz
Size 33.3 kB
Tags Source
SHA-256 checksum
How to use checksums
916e3181f3bced03d8efc4b799617d809f26fd12b5897c5a897d3dfa8e1517c5
BLAKE2b-256 checksum
How to use checksums
a61a04d9476b87abb493c3661c6cfa83be4b9bc7b26a4393dbe3b185918bafda
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / uv_wheel_download-0.1.0-py3-none-any.whl

Download URL uv_wheel_download-0.1.0-py3-none-any.whl
Size 9.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dffa39b84fb0ec3a09816703890165a40a92d572348ee9d2762b34ca9a05139f
BLAKE2b-256 checksum
How to use checksums
68946ce42a71b129a9fe33e94b6568b95d231a0c2b07875bc50f534a82ae5a60
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Security for uv-wheel-download 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for uv_wheel_download-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page