Tires
A CLI tool to download wheels in parallel.
tires is a solution for mirroring packages. Tools like bandersnatch
will download every PyPI version of a package, which can be overkill if you
want only a single version of a package. bandersnatch also does not download
the dependencies. On the other hand, pip wheel downloads wheels for your
package and its dependencies, and nothing more, but the downloads are
sequential.
tires seeks to be something in the middle . tires compiles the dependencies
listed in a toml file with uv pip compile (fast/parallel due to uv),
enumerates the unique packages, then downloads and, if needed, builds the
wheels with uvx -p <python-version> pip wheel --no-deps in parallel. Multiple
versions of the same package, for different python versions, can be
downloaded. Wheels are built only for the current platform.
Installation
uv
uv tool install tires
pip
pip install tires
Usage
The following will download wheels for packages listed in manifest.toml (can
be named anything.toml) to wheels/.
tires get /path/to/manifest.toml /path/to/wheels/
Manifest File Format
The manifest file is a TOML file with a [packages] table. Each package is
defined as a key under [packages] with a table of options.
Options
versions: A list of version specifiers (strings). Each specifier can be:- An exact version (e.g.,
"1.26.4") - A version range (e.g.,
">=70,<73") - An empty string (meaning
"latest")
- An exact version (e.g.,
python: A list of Python version strings (e.g.,["3.10", "3.12"]) for which to build wheels.torch-backend: (Optional) A list of torch back ends (e.g.,["cu126", "auto"]) as supported byuv.index: (Optional) A custom package index URL.
Examples
See the examples/ directory for sample manifest files.
Basic manifest (examples/manifest.toml)
# Basic usage. Can specify a PyPI package name or github url.
[packages]
scipy = {} # just a package name from PyPI
'git+https://github.com/lanl/tires.git' = {} # GitHub URL to python package
# Inline specification of package versions and python versions
# The empty string triggers download of the latest numpy version.
numpy = { versions = ["2.4.1", "1.26.4", ""], python = ["3.10", "3.13"] }
# Table specification of package versions and python versions
[packages.setuptools]
versions = [">=70,<73", ">79", ">81"] # can specify versions and bounds
python = ["3.12"] # can specify python version
# Can specify torch backend, like in uv
[packages.torch]
torch-backend = ["cu126"]
python = ["3.12"]
Notes
-
If
versionsis not specified, it defaults to the latest stable release version. -
If
pythonis not specified, it defaults to the Python versions provided to thetires getcommand (or the default:"3.10 3.11 3.12 3.13 3.14"). -
An empty string in
versions("") is interpreted as "latest". -
Version specifiers that do not start with an operator (like
==,>=, etc.) are treated as exact versions and will be prefixed with==. -
Git dependencies can be specified directly as a string (e.g.,
'git+https://github.com/lanl/tires.git' = {}) or as a key with options. -
The
tomlfile must not list the same package more than once. For example, the following is not allowed.numpy = { python = ["3.11"] } numpy = { python = ["3.10"] }
You must rewrite as
numpy = { python = ["3.10", "3.11"] }
However, including both
scipyandnumpyis fine, even thoughscipydepends onnumpy.
LANL Software Release Information
- O5084
Metadata
Release files for tires 0.1.12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| tires-0.1.12.tar.gz | 4.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tires-0.1.12-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 10.0 kB
Release files / tires-0.1.12.tar.gz
| Download URL | tires-0.1.12.tar.gz |
|---|---|
| Size | 4.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1a0007ad6cd5fc2d0055e5e8058a4d611a0712e1a3af84ad9061191e07a57bf7
|
|
BLAKE2b-256 checksum How to use checksums |
5a17222d01e38dc1d4d3bd96fc1d1a92bd7e1aac5dc0b293b49bc2c174f57d1e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / tires-0.1.12-py3-none-any.whl
| Download URL | tires-0.1.12-py3-none-any.whl |
|---|---|
| Size | 5.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5e5b109c6d45862568693a0e23272b8c1972ec687783e2f3f6d3c14bf2d50b7d
|
|
BLAKE2b-256 checksum How to use checksums |
23c9b176920f203cd9fe1999c95deeb50e2a97acfac4f215e347de79497aadb0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for tires 0.1.12
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.