Skip to main content

Dependency freshness auditor for Python projects

Project description

PyPI version PyPI Downloads

██████╗ ██╗██████╗       ██╗   ██╗███████╗██████╗ ██╗   ██╗
██╔══██╗██║██╔══██╗      ██║   ██║██╔════╝██╔══██╗██║   ██║
██████╔╝██║██████╔╝█████╗██║   ██║█████╗  ██████╔╝██║   ██║
██╔═══╝ ██║██╔═══╝ ╚════╝╚██╗ ██╔╝██╔══╝  ██╔══██╗╚██╗ ██╔╝
██║     ██║██║             ╚████╔╝ ███████╗██║  ██║ ╚████╔╝
╚═╝     ╚═╝╚═╝              ╚═══╝  ╚══════╝╚═╝  ╚═╝  ╚═══╝

pip-verv (Version Review) is a read-only CLI tool that audits the temporal freshness of Python dependencies. It measures how long each dependency has been behind the latest stable release on PyPI, calculates a per-package GAP in days, and produces a project-wide Health Score (0–100). It does not install, modify, or resolve environments.


Installation

pip install pip-verv

Usage

# Audit the current directory
verv --path .

# Output as JSON
verv --format json

# CI: fail if Health Score drops below 70
verv --score-fail 70

# CI: fail if any dependency GAP exceeds 365 days, with max 2 MAJOR-outdated deps
verv --score-fail 70 --gap-fail 365 --max-major 2

# Export to file
verv --format json > audit.json

# Audit only dependencies with a release newer than a date
verv --since 2025-01-01

# Audit explicit files
verv --env requirements.txt --env requirements-dev.txt

# Skip cache
verv --no-cache

CLI Flags

Flag Description
--path PATH Project root to scan (default: .)
--env FILE Explicit source file(s); repeatable; disables auto-discovery
--ignore PKG Package name(s) to exclude; repeatable
--since DATE Include only deps whose latest stable release is after YYYY-MM-DD
--format FORMAT Output format: rich (default), json, csv, md
--no-cache Disable the file-based PyPI response cache
--score-fail N Exit non-zero if Health Score < N
--gap-fail N Exit non-zero if any dependency GAP > N days
--max-major N Exit non-zero if MAJOR-outdated dependency count > N
--max-outdated N Exit non-zero if total outdated dependency count > N

Output Fields (All Formats)

Each dependency row/object includes:

Field Meaning
name Package name
status up_to_date, outdated, or no_data
installed Version currently installed in the environment (if present)
latest Latest stable version available on PyPI
target Version you should upgrade to now (see below); null if up-to-date or blocked
bump Semver jump required to reach target (major, minor, patch, or null)
urgency How pressing the upgrade is (hybrid of time and semver: major, minor, patch, na)
days_behind Days between your version's release and the latest release
blockers List of packages whose constraints prevent upgrading to the latest version

target field explained

  • Up-to-date: null (nothing to do)
  • Outdated, no blockers: latest (upgrade freely)
  • Outdated, blocked, can partially upgrade: highest version allowed by environment constraints
  • Outdated, blocked at current version: null (already at env ceiling; see blockers)

Output Formats

Format Description
rich Colour-coded terminal table grouped by urgency, with Health Score summary
json Machine-readable JSON with score and per-dependency detail
csv Comma-separated values, one row per dependency
md Markdown table, suitable for reports or PR comments

All formats include the fields above, in this order:

name, status, installed, latest, target, bump, urgency, days_behind, blockers


Health Score

The Health Score (0–100) is the mean of per-package freshness scores:

  • Up-to-date: 100%
  • Outdated: Linear penalty by urgency:
    • major: 0% at 365 days behind
    • minor: 0% at 730 days
    • patch: 0% at 1460 days
  • Unknown freshness: Excluded from average

Formula:

$$ \text{score} = \frac{\sum \text{per-package scores}}{\text{count of known-freshness packages}} $$

Score Status
90–100 Excellent
70–89 Healthy
50–69 Needs attention
< 50 High risk

Example JSON Output

{
  "score": 86.2,
  "generated_at": "2026-05-05T09:28:08.576154",
  "dependencies": [
    {
      "name": "pyarrow",
      "status": "outdated",
      "installed": "23.0.0",
      "latest": "24.0.0",
      "target": "24.0.0",
      "bump": "major",
      "urgency": "minor",
      "days_behind": 92,
      "blockers": []
    },
    {
      "name": "pandas",
      "status": "outdated",
      "installed": "2.3.3",
      "latest": "3.0.2",
      "target": null,
      "bump": "major",
      "urgency": "minor",
      "days_behind": 182,
      "blockers": ["streamlit (<3,>=1.4.0)"]
    }
    // ...
  ]
}

License

This project is licensed under the MIT License. See LICENSE for details.

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

pip_verv-0.1.1.tar.gz (70.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pip_verv-0.1.1-py3-none-any.whl (17.4 kB view details)

Uploaded Python 3

File details

Details for the file pip_verv-0.1.1.tar.gz.

File metadata

  • Download URL: pip_verv-0.1.1.tar.gz
  • Upload date:
  • Size: 70.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.2

File hashes

Hashes for pip_verv-0.1.1.tar.gz
Algorithm Hash digest
SHA256 76ac33f9c43ddf21f12ec2d6e9fc574c48fed46518e38494028c534ae3e55176
MD5 f5ba913d29af98017ab313a16de856c5
BLAKE2b-256 3b66a9ca87329a21ff610277e7041d51e093142b9f11fedd1892c61f9961e0cd

See more details on using hashes here.

File details

Details for the file pip_verv-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: pip_verv-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 17.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.2

File hashes

Hashes for pip_verv-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 06ddcf1154ed81d8fb30a9f00bf3fb174bd07f02f6902610154745a66f5c5b47
MD5 b4b846b79177f0a84c24f0cee8656277
BLAKE2b-256 33e301d228cd5916b3b37c65c615238f7c2a1b5dafef5d2d57afb6e4a592f7fd

See more details on using hashes here.

Supported by

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