Wheels, not just metadata
requires_python is often incomplete. PyPilot checks the wheel tags per platform too, so "mediapipe 0.10.14 stops at cp312" is caught before pip fails on 3.13.
How it works
PyPilot intersects requires_python with the wheels each dependency publishes for your platform, sets up the environment on a version that works, and names the package that set the limit. It runs locally, with no AI service and no API keys.
A project that pins mediapipe==0.10.14 next to numpy. PyPilot reads PyPI and answers in a fraction of a second once metadata is cached:
$ pypilot doctor
PyPilot doctor: C:\src\demo
package manager : Auto
โโ Environment โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
uv : present (v0.13.5, on PATH)
virtualenv : none
interpreters : 3.15 (python3), 3.14 (C:\Python314\python.exe)
data tables : refreshed 3 hours ago (next in 6 days); 1 of 5 bundled
โโ Project โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
files : requirements.txt
dependencies : mediapipe==0.10.14, numpy
โโ Compatibility โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
supported Python: 3.12
recommended : Python 3.12
โข mediapipe 3.9โ3.12
โข numpy 3.12โ3.15
โโ Findings โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
[WARN ] No environment set up yet
Dependencies support Python 3.12. Recommended: 3.12 (upper bound set by mediapipe, which supports 3.9โ3.12).
The editors and the pip package are thin wrappers. They find or download one native engine, and that engine does all the work: the same answers in Zed, VS Code and the terminal.
data_refresh_days (7 by default).