It's really easy to accidentally use your transitive deps by accident. This project allows you to check (given a working venv) that everything you import actually comes from either relative imports, your explicit first-order deps, or stdlib.
Usage:
# Run within a working venv
# For CI
$ python -m checkdeps checkdeps
# If you use non-relative imports for your own project's code, also add
$ python -m checkdeps checkdeps --allow-names checkdeps
# For humans, pass --details
$ python -m checkdeps --details checkdeps/cli.py
checkdeps/cli.py:
checkdeps/cli.py:
click available from 'click'
logging stdlib
pathlib.Path stdlib
stdlibs.stdlib_module_names available from 'stdlibs'
sys stdlib
trailrunner available from 'trailrunner'
typing.Optional stdlib
typing.Set stdlib
Exits nonzero if there are any issues.
Make sure you specify --installed-path
to the site-packages dir and run from the same
python version. A parent of your target_dir
should be obviously the root of your
project (pyproject.toml
, .git
, etc), which is what the requirements
are relative to.
I've looked at them, and I don't like the assumptions they make about top-level names, stdlib, or namespace packages. I think this project is more correct and more self-contained.
- Ensure metadata and requirements match
- Offer to add missing deps
- Better handling of version-dependent deps in an
if
ortry
/except
Usage of this library should work back to 3.8, but development (and mypy compatibility) only on 3.10-3.12. Linting requires 3.12 for full fidelity.
This library follows meanver which basically means semver along with a promise to rename when the major version changes.
checkdeps is copyright Tim Hatch, and licensed under
the MIT license. See the LICENSE
file for details.