This page states what PyDependencyCheck does not do. Read it before relying on a green result.
- Manifest-based, not environment-based. The scanner reads
requirements.txt,pyproject.toml(PEP 621 and Poetry),constraints.txt,setup.py, andsetup.cfg. It does not audit an installed virtual environment the waypip-auditdoes.scanreports declared dependencies; in the repository's owntest_project/it reportsTransitive: 0. - Lockfiles are discovered but not parsed (verified 2026-10-19).
poetry.lock,uv.lock,Pipfile, andPipfile.lockare found by the scanner, but_parse_filelogsUnsupported file typeand they contribute zero dependencies. A scan of a project with only lockfiles reportsTotal dependencies: 0. Use the manifest (pyproject.toml,requirements.txt) as the source until lockfile parsing ships. - Transitive resolution depends on context. A clean scan does not prove the full installed graph is clean. Use a lockfile-aware or environment-aware tool if you need the resolved graph.
- No multi-ecosystem or container scanning. This tool is Python-specific. For containers or multi-language repositories, use a dedicated scanner (for example OSV-Scanner or Syft/Grype).
- Dynamic
setup.pymetadata is not executed. Staticinstall_requiresandextras_requireare parsed (verified in v1.5.0); calls such asinstall_requires=read_requirements()are reported as warnings rather than silently treated as "no dependencies".
- No reachability analysis. OSV advisories are matched to declared versions; the tool cannot tell whether a vulnerable code path is actually used. Expect noise and triage with VEX.
- PEP 440 edge cases. Versions with
.postN,.devN, local-version suffixes, or four or more numeric components may fall back to exact-string matching rather than range matching. Seeinternal/ROADMAP_HONEST.mdfor the tracked gap. - Offline mode does not check vulnerabilities.
--offlineskips OSV and PyPI, so the resulting health score is a local hygiene score only.
- Exact pins only.
remediateupdates==pins to the OSV fixed version. Version ranges are not rewritten. Review the printed diff before using--apply. --prrequiresgitand (optionally) an authenticatedghCLI. Withoutghit can still create a branch and commit, but cannot open a PR.
- Requires a Git repository and sufficient history; shallow clones limit results.
- Evidence is the blamed manifest line, not a package-manager transaction log.
- See Provenance.
- SBOMs describe declared dependencies, not embedded files or container layers.
--signrequires thesbomextra (cryptography); without it, signing is skipped with a warning.- VEX default state is
under_investigation; the tool does not claimnot_affectedwithout evidence. See VEX.
- Beta (v1.5.0). The CLI can change between minor releases.
- Single maintainer; no formal security SLA. See
SECURITY.md. - No official GitHub Action or SARIF output yet;
gateis designed to run as a step.
PyDependencyCheck is not affiliated with OWASP Dependency-Check, and it is not PyDeepMesh. See Alternatives for the comparison.