gauge-sh / tach

A Python tool to enforce dependencies, using modular architecture 🌎 Open source 🐍 Installable via pip πŸ”§ Able to be adopted incrementally - ⚑ Implemented with no runtime impact ♾️ Interoperable with your existing systems πŸ¦€ Written in rust
https://gauge.sh
MIT License
1k stars 35 forks source link

Add 'check-external' command #221

Closed emdoyle closed 1 month ago

emdoyle commented 1 month ago

cc: @malcolmgreaves

[From the docs added in this PR] Tach can validate that the external imports in your Python packages match your declared package dependencies in pyproject.toml.

For each pyproject.toml found from the project root, Tach will scan all imports in the associated Python source and compare them with the declared dependencies. Tach will report an error for any external import which is not satisfied by the declared dependencies - preventing your users from errors due to missing imports.

This is typically useful if you are developing more than one Python package from a single virtual environment. Although your local environment may contain the dependencies for all your packages, when an end-user installs each package they will only install the dependencies listed in the pyproject.toml.

This means that, although tests may pass in your shared environment, an invalid import can still cause errors at runtime for your users.

In case you would like to explicitly allow a certain external module, this can be configured in your tach.yml with the 'external.exclude' key.

NOTE: It is recommended to run Tach within a virtual environment containing all of your dependencies across all packages. This is because Tach uses the distribution metadata to map module names like 'git' to their distributions ('GitPython').

image