FAQ
Why not just run pip install on the new Python?
You can, and you should eventually. But pip stops at the first package that needs a compiler, tells you nothing about the others, needs the target interpreter and each OS, and never tells you which newer version would have worked. wheelripe answers for every package and every platform at once, from any machine, in a couple of seconds.
How do I know it agrees with pip?
CI checks it against pip itself on every push: for 26 real packages on 7 platforms, for both 3.15 and 3.15t, it asks pip install --dry-run --only-binary=:all: --python-version … --abi … --platform … and fails on any disagreement. Then it installs on real CPython 3.15 and 3.15t interpreters and compares again.
My package ships abi3 wheels. Is it ready for 3.15t?
No. abi3 is the stable ABI of GIL-enabled builds; free-threaded CPython cannot load it. PEP 803 adds abi3t for that, starting at 3.14. A wheel tagged abi3.abi3t works on both. wheelripe applies the PEP 803 table exactly.
It says BLOCKED, but I can see a cp315 wheel on PyPI.
Check the platform tag. If it is manylinux_2_39 and your floor is 2.34 (the default), pip on your servers will not use it. The report says “wheels exist for a newer glibc”; raise --glibc if your hosts really are newer.
Is BUILD bad?
Not necessarily. Many pure-Python packages publish only an sdist; they build in seconds with no compiler. It counts as a failure only with --fail-on build.
Does it need PyPI?
No. PyPI's JSON API is the default, but any PEP 691 / PEP 503 simple index works with --index-url and --extra-index-url: PyTorch's download.pytorch.org/whl/cpu (or /cu126 …), Artifactory, Nexus, devpi, GitLab. Index lines in your requirements file and the registries recorded in uv.lock are picked up automatically. See Indexes.
Does it change my lockfile?
No. It only reads. The suggested bump is printed; you apply it with your own tool (uv lock --upgrade-package numpy, etc.).
Other interpreters?
CPython only for now — that is where the per-version wheel problem lives. PyPy and GraalPy are possible later.
Why cheese?
Python wheels are named after cheese wheels, and PyPI was once called the Cheese Shop. A ripe Emmental has holes; so does a lockfile on a brand-new Python.