Skip to main content

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.

Not affiliated with OWASP Dependency-Check: the names are similar, but OWASP Dependency-Check is a separate multi-language SCA tool. PyDependencyCheck is a Python-specific CLI focused on provenance and governance.

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

Browse all projects →

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.

30-second example

Example output from this repository's test_project/ (commit metadata is real):

$ pydependencycheck why requests
requests
  Version: ==2.32.0
  Source: test_project/requirements.txt

Introduced by:
  Commit: 09fa4f3
  Author: Georgi Mammen Mullassery
  Date: 2026-08-03 01:55:27
  Message: Initial PyDependencyCheck scaffold: Rust core + Python CLI, 5-phase roadmap

why and trace reconstruct provenance from real Git history. See Provenance.

Features / Highlights

  • CI gating: pydependencycheck gate --min-health exits non-zero with GitHub Actions annotations when thresholds fail.
  • Provenance: why and trace show 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: remediate only updates exact == pins to OSV fix versions; version ranges are not modified.
  • Transitive scope varies: The scan/health view is based on parsed manifest files and detected dependencies; installed transitive resolution depends on context.

Project status

PyDependencyCheck is in beta (v1.5.0). Core features (scanning, provenance, health scoring, vulnerability checks, licensing, SBOM export, CI gating) are implemented. See Project status for current gaps and CHANGELOG.md for recent changes.

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+. Wheel availability depends on the release: check the PyPI files for your version before installing, or build from source. See Compatibility.

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
remediate Suggest/apply fixes for vulnerable exact pins
export Export SBOM in CycloneDX/SPDX (optionally signed)
vex Export OSV findings as CycloneDX VEX
gate CI gate with exit code and annotations
snapshot Save a dependency baseline
drift Detect drift since a baseline
history Show dependency history and trends

Full flags: Command reference.

Known issues and deferred work

Blocked / failed:

  • Merge with/define boundary vs PyDeepMesh; SARIF + Action.

Rejected / deferred:

  • Duplicate multi-ecosystem scanning.

Current verified gaps: Project status. Historical 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.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pydependencycheck 1.5.1
File Size Uploaded Provenance
pydependencycheck-1.5.1.tar.gz 97.7 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for pydependencycheck 1.5.1
File Interpreter ABI Platform
pydependencycheck-1.5.1-cp38-abi3-macosx_11_0_arm64.whl CPython 3.8 abi3 macOS 11.0+ ARM64 Details

Total release size: 2.0 MB

Release files / pydependencycheck-1.5.1.tar.gz

Download URL pydependencycheck-1.5.1.tar.gz
Size 97.7 kB
Tags Source
SHA-256 checksum
How to use checksums
e6d7a7e8b0fd3f52e7a48e122db2050d3e77d97238f12195bc7fc6b048439f8c
BLAKE2b-256 checksum
How to use checksums
396dfb5c39a15a84a97fd30f84a42b8e3fbfce046665d64da92962a3421e68bc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release files / pydependencycheck-1.5.1-cp38-abi3-macosx_11_0_arm64.whl

Download URL pydependencycheck-1.5.1-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
5374a94ced932a40a18219850f17f11d74bb494c1a8cd9bbbfe773dd8b05551d
BLAKE2b-256 checksum
How to use checksums
fcd463a4002c68b9f114905d4bb215447edc3a525949cb3588b34e1aec24a918
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Security for pydependencycheck 1.5.1

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page