retread
A retread (/ˈriːtrɛd/) is a used tire whose tread has been replaced -- retread checks the quality of rebuilt Python wheels.
retread inspects and compares Python wheels. Given a downstream rebuild, it resolves the corresponding upstream wheel and reports which files differ, are missing, or were added -- without downloading entire wheel files.
It uses zipwire for efficient remote wheel access via HTTP range requests and pypi-simple to interact with package indexes.
Note: retread does not rebuild wheels. It only inspects and compares existing wheels.
Features
- Compare upstream and downstream wheels without downloading entire files
- Detect missing, extra, and modified files between wheel builds
- CRC-32 based fast comparison from ZIP central directory metadata
- Platform and ABI consistency checks (shared libraries, extension
modules,
Root-Is-Purelib, tag validation) - Show unified diffs of individual files between wheels
- Both synchronous and asynchronous APIs
- Pluggable HTTP backends: requests (default), httpx2, aiohttp
- Text and JSON output formats
Installation
pip install retread
With optional async HTTP backends:
pip install retread[aiohttp] # aiohttp (async)
pip install retread[httpx2] # httpx2 (async, HTTP/2)
pip install retread[all] # all backends
Usage
Compare wheels
Compare a downstream wheel against its upstream source on PyPI:
# Compare by URL
retread compare https://rebuild.example/foo-1.0-py3-none-any.whl
# Compare a local wheel file
retread compare /path/to/foo-1.0-py3-none-any.whl
# Resolve from a downstream index
retread compare foo-1.0-py3-none-any.whl --downstream-index https://rebuild.example/simple/
# JSON output
retread compare foo-1.0-py3-none-any.whl --downstream-index https://rebuild.example/simple/ -f json
Diff files
Show unified diffs of specific files between upstream and downstream wheels:
# Diff the METADATA file
retread diff https://rebuild.example/foo-1.0-py3-none-any.whl foo-1.0.dist-info/METADATA
# Diff multiple files
retread diff /path/to/foo-1.0-py3-none-any.whl foo-1.0.dist-info/METADATA foo-1.0.dist-info/WHEEL
Limitations
- CPython only -- PyPy and other Python implementations are not supported.
- Linux only -- Windows and macOS platform tags are not supported.
- Architecture-based matching -- Upstream wheel matching uses CPU
architecture suffixes (e.g.
x86_64,aarch64) to fuzzy-matchlinuxandmanylinuxplatform tags. Manylinux version specifiers are ignored; a downstreamlinux_x86_64wheel will match an upstreammanylinux_2_28_x86_64wheel. Musllinux wheels require an exact platform tag match.
License
Apache-2.0
Release files for retread 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| retread-0.1.0.tar.gz | 46.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| retread-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 81.3 kB
Release files / retread-0.1.0.tar.gz
| Download URL | retread-0.1.0.tar.gz |
|---|---|
| Size | 46.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
50ee8fbe636dfb1cc2e771eb9724611943292efaff1ee71028cff4b1c78db4bf
|
|
BLAKE2b-256 checksum How to use checksums |
dd21cdb51b5b2f247bdc63d855ea7efbfdedf19316e04abb37c42cbcb2e5aec7
|
| 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 Aug 26, 2026.
Transparency logRelease files / retread-0.1.0-py3-none-any.whl
| Download URL | retread-0.1.0-py3-none-any.whl |
|---|---|
| Size | 35.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6fe2200bdff95f9c255dd24ee84ffd6e29618168e99ba70cadd25e96e9e7f327
|
|
BLAKE2b-256 checksum How to use checksums |
2a053571455e46f4d60b2bcff7df453bade8fb8157e3b6f3d50b263b6bc6ce24
|
| 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 Aug 26, 2026.
Transparency log