Skip to main content

Check dependencies of a python project against pyproject.toml requirements

Project description

Check Dependencies

Check all imports from python files and compares them against the declared imports of a pyproject dependency list of expected imports. It can be used as a stand-alone or as part of a CI/CD to check if an application has all the necessary, but no superfluous imports.

Usage

usage: check-dependencies [-h] [--include-extra] [--verbose] [--all] [--missing MISSING] [--extra EXTRA] file_name [file_name ...]

Find undeclared and unused (or all) imports in Python files

positional arguments:
  file_name          Python Source file to analyse

optional arguments:
  -h, --help         show this help message and exit
  --include-extra    Include dev dependencies
  --verbose          Show every import of a package
  --all              Show all imports (including correct ones)
  --missing MISSING  Comma seperated list of requirements known to be missing. Assume they are part of the requirements
  --extra EXTRA      Comma seperated list of requirements known to not be imported. Assume they are not part of the requirements```

Output

The output is a list of imports with a prefix indicating the status of the import.

  • ! - Undeclared import
  • + - Extra import, declared in pyproject.toml, but not used in the file
  • - Correct import (only shown with --all)

In case of --verbose, the output is a list of all imports in the file, prefixed with:

  • !NA - Undeclared import
  • +EXTRA - Extra import, declared in pyproject.toml, but not used in the file
  • OK - Correct import (only shown with --all)

Additionally, each import is prefixed with the file name and line number where it is imported.

Examples

Basic usage

> check-dependencies  project/src/
  pandas
! matplotlib
  numpy
+ requests

Output all dependencies

Output all dependencies, including the correct ones.

> check-dependencies --all project/src/
  pandas
! matplotlib
  numpy
+ requests

Verbose output

Output each erroneous import and extra dependency with cause, file name and line number.

> check-dependencies --verbose project/src/
!NA matplotlib project/src/main.py:4
+EXTRA project/pyproject.toml requests

Combine verbose and all

Output all imports, including the correct ones with file name and line number.

> check-dependencies --verbose --all project/src/
 OK project/src/data.py:5 pandas
 OK project/src/main.py:3 pandas
 OK project/src/plotting.py:4 pandas
!NA project/src/plotting.py:5 matplotlib
 OK project/src/plotting.py:6 numpy

### Dependencies in config file not used in application:
# Config file: project/pyproject.toml
+EXTRA requests

Configuration

The configuration is read from pyproject.toml file. The configuration file supports two entries, [tool.check_dependencies.extra-requirements] that can be used to add extra dependencies to the list of requirements to be treated as existing requirements. The second entry, [tool.check_dependencies.ignore-requirements] does the opposite, it will ignore extra requirements that are not used in the application.

[tool.check_dependencies]
known-missing = [
  undeclared_package,
  another_package
]
known-extra = [
  package_as_extra_for_another_package,
  yet_another_package
]

Exit code

  • 0: No missing or superfluous dependencies found
  • 2: Missing (used, but not declared in pyproject.toml) dependencies found
  • 4: Extra (declared in pyproject.toml, but unused) dependencies found
  • 6: Both missing and superfluous dependencies found
  • 8: Could not find associated pyproject.toml file
  • 1: Another error occurred

Development

Feature requests and merge requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate. Also with this project, I want to keep the dependencies to a minimum, so please keep that in mind when proposing a change. Currently, the only dependencies is toml to support Python 3.10 and below.

Coding Standards

Type Package Comment
Linter black Also for auto-formatted modules
Logging logger Minimize additional packages
Packaging poetry
Tests pytest
Typing mypy Type all methods
Linting flake8
Imports isort

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

check_dependencies-0.10.2.tar.gz (10.0 kB view details)

Uploaded Source

Built Distribution

check_dependencies-0.10.2-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

Details for the file check_dependencies-0.10.2.tar.gz.

File metadata

  • Download URL: check_dependencies-0.10.2.tar.gz
  • Upload date:
  • Size: 10.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for check_dependencies-0.10.2.tar.gz
Algorithm Hash digest
SHA256 69874089eb605a13e8e881172f1ae5ec2b088a02a83a33b380163bc1d6fb404f
MD5 447fea1c12cd1b95a5d1d6fe566d9daa
BLAKE2b-256 3649552c87b45759b427d210c1029896d3269d92650dc281e282630a2117d454

See more details on using hashes here.

File details

Details for the file check_dependencies-0.10.2-py3-none-any.whl.

File metadata

File hashes

Hashes for check_dependencies-0.10.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a58b15ae155e3273b979322a08fa5bbe045db5bfb1ec4cdb066d430a41a4535a
MD5 7288ec8d10a5d7957da55415eac4b901
BLAKE2b-256 2f5cc9d5ecc06a55ca90c49f0a51809a3f53b601196e959277120c82dd88b618

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page