Skip to main content

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

Supported File Formats

pip-verv auto-discovers and parses dependency declarations from the following sources:

File Sections parsed
requirements*.txt All pinned/ranged deps; follows -r includes recursively
pyproject.toml (PEP 621) [project.dependencies], [project.optional-dependencies.*]
pyproject.toml (PEP 735 / uv) [dependency-groups.*]
pyproject.toml (Poetry) [tool.poetry.dependencies], [tool.poetry.group.*.dependencies]

Poetry constraint mapping:

Poetry syntax PEP 440 equivalent
^1.2.3 >=1.2.3,<2.0.0
^0.2.3 >=0.2.3,<0.3.0
~1.2.3 >=1.2.3,<1.3.0
* (any version, audited without version filter)

Git, path, and URL dependencies are detected but flagged as not auditable (excluded from the Health Score).


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 Output

| Name              | Status     | Installed | Latest | Target | Bump  | Urgency | Days Behind | Blockers               |
|-------------------|------------|-----------|--------|--------|-------|---------|-------------|------------------------|
| hydra-core        | up_to_date | 1.3.2     | 1.3.2  |        |       | na      | 0           |                        |
| pandas            | outdated   | 2.3.3     | 3.0.3  |        | major | minor   | 223         | streamlit (<3,>=1.4.0) |
| omegaconf         | up_to_date | 2.3.0     | 2.3.0  |        |       | na      | 0           |                        |
| tqdm              | outdated   | 4.67.1    | 4.67.3 | 4.67.3 | patch | patch   | 435         |                        |
| pyarrow           | outdated   | 23.0.0    | 24.0.0 | 24.0.0 | major | minor   | 92          |                        |
| pydantic          | outdated   | 2.12.5    | 2.13.4 | 2.13.4 | minor | minor   | 160         |                        |
| pydantic-settings | outdated   | 2.12.0    | 2.14.1 | 2.14.1 | minor | minor   | 178         |                        |
| streamlit         | outdated   | 1.53.0    | 1.57.0 | 1.57.0 | minor | minor   | 104         |                        |
| plotly            | outdated   | 6.5.2     | 6.7.0  | 6.7.0  | minor | patch   | 84          |                        |
| python-dotenv     | outdated   | 1.2.1     | 1.2.2  | 1.2.2  | patch | patch   | 126         |                        |

License

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

Metadata

Release files for pip-verv 0.2.0

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

Source distribution (sdist)

Source distribution for pip-verv 0.2.0
File Size Uploaded Provenance Actions
pip_verv-0.2.0.tar.gz 72.6 kB Without provenance Details for pip_verv-0.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pip-verv 0.2.0
File Interpreter ABI Platform Actions
pip_verv-0.2.0-py3-none-any.whl Python 3 none any Details for pip_verv-0.2.0-py3-none-any.whl

Total release size: 91.4 kB

Release files / pip_verv-0.2.0.tar.gz

Download URL pip_verv-0.2.0.tar.gz
Size 72.6 kB
Tags Source
SHA-256 checksum
How to use checksums
bb885d1a75e7f378ff368e41d27982a2ae4959491a17ba1b387a8236c95adc28
BLAKE2b-256 checksum
How to use checksums
66531aabed9fbd4e10b8422da83fd46c4b4c731d6d361941bcd096a261bc801e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.2

Release files / pip_verv-0.2.0-py3-none-any.whl

Download URL pip_verv-0.2.0-py3-none-any.whl
Size 18.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e4599cc6e32c0796024a5595ac3165c589d9462d1c95651add9d8be300bd1fd4
BLAKE2b-256 checksum
How to use checksums
30702a022cdd7eb6b9f3c3b6933ff045c199faf659b9650ac8856a18a4dd4465
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.2

Security for pip-verv 0.2.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.

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