wheelripe

Reference

Flags

wheelripe [PATH|SPEC ...] [options]
wheelripe wheel FILE.whl ... [-p PY] [--platform KEY]
wheelripe mcp
FlagDefaultMeaning
-p, --python3.15Target CPython; t = free-threaded.
--platform KEYlinux-x86_64, macos-arm64, windows-amd64Repeat or comma-separate.
--all-platformsEvery known key.
--glibc / --musl / --macos2.34 / 1.2 / 14Oldest system you deploy on.
-f, --formattexttext, json, markdown, github.
--fail-onbumpbump, blocked, build, never.
--show-readyList ready packages one by one.
--preAllow pre-releases as the suggested bump.
-i, --index-url URLPyPISimple-API index (PEP 691/503) to use instead of PyPI. Credentials in the URL are never printed.
--extra-index-url URLOne more simple-API index; repeatable; files are pooled.
--index URLhttps://pypi.org/pypiPyPI JSON API base, for a mirror of it.
--workers N8Parallel index requests.
-o, --output FILEstdoutWrite the report to a file.
--summary FILEAppend a Markdown summary (e.g. $GITHUB_STEP_SUMMARY).
--json-out FILEAlso write the JSON report.
--annotationsAlso print ::error/::warning lines.
-V, --versionPrint the version.

Exit codes

CodeMeaning
0Nothing at or above the --fail-on level.
1Something is; the report says what.
2Usage error, unreadable input, an index that could not be reached, or one that answered with something that is not a simple index page.

Statuses

StatusMeaning
readyA wheel for this version installs on the target.
skipAn environment marker excludes the package on this target.
buildThe release has only an sdist (for every Python).
bumpNo wheel at this version; fix names the first newer release with one.
blockedNo release has a wheel for the target yet.
excludedThe release's requires-python excludes the target.
missingThe package or version is not on the index.

A package's overall status is its worst status across the platforms you asked for.

Yanked files (PEP 592) are skipped, as pip skips them — except when an exact pin selects a yanked release: pip installs it then, with a warning, so wheelripe judges that release and marks the package "yanked": true.

Platform keys

KeyWheel tags accepted
linux-x86_64, linux-aarch64manylinux_X_Y_ARCH with X.Y ≤ glibc floor, legacy manylinux1/2010/2014, linux_ARCH
musllinux-x86_64, musllinux-aarch64musllinux_X_Y_ARCH with X.Y ≤ musl floor
macos-arm64macosx_X_Y_arm64 / universal2, X ≤ macOS floor
macos-x86_64x86_64, intel, universal, universal2 …
windows-amd64, windows-arm64, windows-x86win_amd64, win_arm64, win32

Interpreter and ABI rules

Wheel3.15 (GIL)3.15t (free-threaded)
cp315-cp315yesno
cp315-cp315tnoyes
cp3X-abi3, X ≤ 15yesno
cp3X-abi3t, 14 ≤ X ≤ 15 (PEP 803)noyes
cp3X-abi3.abi3tyesyes
py3-none-anyyesyes

JSON report

{
  "tool": "wheelripe",
  "python": "3.15",
  "platforms": ["linux-x86_64", "macos-arm64", "windows-amd64"],
  "sources": ["uv.lock"],
  "ripe": false,
  "summary": {"ready": 1, "skip": 0, "build": 0, "bump": 2,
              "blocked": 1, "excluded": 0, "missing": 0},
  "packages": [
    {
      "name": "numpy", "version": "1.26.4", "pinned": true,
      "status": "bump", "fix": "2.5.2",
      "platforms": {"linux-x86_64": {"status": "bump", "note": "..."}},
      "latest": "2.5.4", "ships": ["cp39", "cp310", "cp311", "cp312"],
      "requires_python": ">=3.9",
      "upstream": "https://github.com/numpy/numpy",
      "origin": "uv.lock"
    }
  ]
}

Packages are sorted worst first. Fields that do not apply are omitted. Two top-level fields appear only when they have something to say: indexes (the indexes consulted, redacted, when anything besides PyPI was used, e.g. ["download.pytorch.org/whl/cpu", "pypi.org"]) and warnings (index problems such as a 401, also printed to stderr).

FAQ →