PyDependencyCheck
Dependency intelligence and supply-chain security for Python projects. Scan dependencies, track provenance, detect unused packages, check licenses, generate signed SBOMs, and gate CI builds.
Not to be confused with PyDeepMesh: PyDeepMesh builds repository dependency graphs and matches advisories across ecosystems; PyDependencyCheck explains why each Python dependency exists, who added it, and whether it is used.
Which project do I need?
Part of the Mullassery open-source family. These tools have similar names — here is the short version of who does what:
| If you need to… | Use |
|---|---|
| Build a repository's dependency graph and match it against vulnerability advisories (Python, Rust, Node, containers) | PyDeepMesh |
| Understand why a Python dependency exists, who added it, and whether it is actually used | PyDependencyCheck |
| Statically analyze a dbt project (risky tests, test blast radius, cost) | PyDBTGuard |
| Statically analyze Apache Beam / Dataflow pipelines (cost, hot keys, reliability) | PyBeamGuard |
| Validate Airflow DAGs and dbt runs | PyAirflowTester |
| Simulate cascading-failure blast radius across infrastructure, data pipelines, and AI systems | PyBlastRadius |
| Check the quality of the data itself at runtime (schema, drift, anomalies) | StatGuardian |
| Discover devices, services, and vulnerabilities on a network | PyNetworkIntel |
| Discover and score API security risk (real traffic, agent/MCP, Cedar policy) | PyAPICheck |
| Trace and root-cause AI agent failures | PyAgentHound |
| Diagnose RAG retrieval failures | PyVectorHound |
| Orchestrate local, dependency-aware tasks (DAG scheduler + content-addressed cache) | PyTaskWireCheck |
What it is
PyDependencyCheck helps you understand not just what you depend on, but why it's there and whether your dependency set is healthy. It combines dependency parsing, graph analysis, OSV vulnerability scanning, Git provenance, and licensing checks into a single CLI. A Rust core powers parsing, graph algorithms, and vulnerability lookups, wrapped in Python.
Features / Highlights
- CI gating:
pydependencycheck gate --min-healthexits non-zero with GitHub Actions annotations when thresholds fail. - Provenance:
whyandtraceshow who added/changed a dependency and full git history. - Vulnerability scanning: Checks against OSV (Open Source Vulnerabilities) in real time.
- Unused dependency detection: AST-based detection of unused packages in your codebase.
- License compliance: Check dependencies against your project's license for compatibility.
- Signed SBOMs: Export CycloneDX or SPDX with RSA-SHA256 signatures.
- Health scoring: Aggregates vulnerabilities, staleness, dead dependencies, and complexity into a single score.
- Multi-format output: Tables, JSON, HTML, or Markdown for integration with CI/reporting.
Who it's for / Use cases
- CI/CD enforcement: Block merges when dependency health drops below acceptable thresholds.
- Security auditing: Identify vulnerable packages and understand their impact.
- Dependency hygiene: Find and remove unused dependencies to reduce attack surface.
- Compliance reporting: Generate signed SBOMs and license reports for audits.
- Open-source maintenance: Track when dependencies were added and why.
What it is not
- Not pip-audit: Shares vulnerability scanning but also includes provenance, unused detection, licensing, SBOM signing, and gating. These are different tools with overlapping features.
- Limited file discovery: Focuses on
requirements.txt,pyproject.toml,setup.py,setup.cfg. Projects that don't use these or have complex multi-project setups may need careful path handling. - Exact-pin remediation:
remediateonly updates exact==pins to OSV fix versions; version ranges are not modified. - Transitive scope varies: The
scan/healthview is based on parsed manifest files and detected dependencies; installed transitive resolution depends on context.
Project status
PyDependencyCheck is in beta (v1.4.2). Core features (scanning, provenance, health scoring, vulnerability checks, licensing, SBOM export, CI gating) are implemented. See CHANGELOG.md for recent fixes and updates.
setup.py / setup.cfg support
Static install_requires and extras_require declarations in setup.py
(AST, never executed) and setup.cfg are now included in the dependency
graph and can be patched by pydependencycheck remediate. Dynamic metadata
such as install_requires=read_requirements() cannot be resolved statically;
the scanner emits an explicit warning instead of silently treating the
project as dependency-free.
CycloneDX VEX export
Export OSV findings as a CycloneDX 1.6 VEX document:
pydependencycheck vex . --output vex.json --state under_investigation
Without runtime reachability the default state is under_investigation, not
not_affected — missing evidence is never presented as a clean result.
Installation
pip install pydependencycheck
Optional extras:
pip install "pydependencycheck[sbom,otel,visualization]"
Requires Python 3.8+. Prebuilt wheels available for Linux, macOS, and Windows.
Quick start
# Scan current project
pydependencycheck scan
# Check health score
pydependencycheck health
# Find out why a package is installed
pydependencycheck why requests
# Trace full history of a dependency
pydependencycheck trace requests
# Check license compliance
pydependencycheck licenses --project-license MIT
# Export signed CycloneDX SBOM
pydependencycheck export --format cyclonedx --output sbom.json
# Gate CI build
pydependencycheck gate --min-health 50
Commands
| Command | Purpose |
|---|---|
scan |
Parse manifests and show dependency overview |
list |
List all detected dependencies |
why <pkg> |
Show git blame provenance |
trace <pkg> |
Show current status and git history |
health |
Compute aggregate health score |
licenses |
License classification and compatibility |
analyze |
Deep graph analysis |
remediate |
Suggest/apply fixes for vulnerable exact pins |
export |
Export SBOM in CycloneDX/SPDX (optionally signed) |
gate |
CI gate with exit code and annotations |
Known issues and deferred work
Blocked / failed:
- Merge with/define boundary vs PyDeepMesh; SARIF + Action.
Rejected / deferred:
- Duplicate multi-ecosystem scanning.
Full shipped/blocked/rejected detail: QUEUE_STATUS.md.
Documentation
License
Licensed under the Apache License, Version 2.0. See LICENSE for details.
Metadata
Release files for pydependencycheck 1.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| pydependencycheck-1.5.0.tar.gz | 157.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pydependencycheck-1.5.0-cp38-abi3-macosx_11_0_arm64.whl | CPython 3.8 | abi3 | macOS 11.0+ ARM64 | Details |
Total release size: 2.1 MB
Release files / pydependencycheck-1.5.0.tar.gz
| Download URL | pydependencycheck-1.5.0.tar.gz |
|---|---|
| Size | 157.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d4f5a6800f9392753e57a0921b1535da0de7ffe270e4350382f0bba2de7efff4
|
|
BLAKE2b-256 checksum How to use checksums |
d6445c317db8bc9b4b75b90a68abb1282d5a1b7964cca015ff593fcd9bce03fe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Release files / pydependencycheck-1.5.0-cp38-abi3-macosx_11_0_arm64.whl
| Download URL | pydependencycheck-1.5.0-cp38-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.8 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
a3e546adea1c39d849e23387946ea18b3988c89337b47b54e05547989ab9e8a0
|
|
BLAKE2b-256 checksum How to use checksums |
87bff4591b3d6621ea16a64d03ab8295ef18dc927864e52800081f92a9858a2d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Security for pydependencycheck 1.5.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.