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.1

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.1
File Size Uploaded Provenance Actions
uv_wheel_download-0.1.1.tar.gz 33.6 kB With provenance Details for uv_wheel_download-0.1.1.tar.gz

Built distribution (wheel)

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

Total release size: 42.8 kB

Release files / uv_wheel_download-0.1.1.tar.gz

Download URL uv_wheel_download-0.1.1.tar.gz
Size 33.6 kB
Tags Source
SHA-256 checksum
How to use checksums
6cf9ce6cc73a8edb5886bbe34760062898dbd1417937b57beb66f7d992ac33ec
BLAKE2b-256 checksum
How to use checksums
bbd3f3c5e731be1edb24d518e93be8c6b88387a380db50eba8a8c2047b8c6c24
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.1-py3-none-any.whl

Download URL uv_wheel_download-0.1.1-py3-none-any.whl
Size 9.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
486dbf9c757643382b2b3efc197eb9e141a2256965fddee1e8ad433d8bd61753
BLAKE2b-256 checksum
How to use checksums
64d5f9b565f54673c5cf7f99f78c16d8e22f90d39bdc3e6f118ffc338fee1a49
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.1

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.1.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.1 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