Skip to main content

A CLI tool that checks how recently your project's dependencies were last updated on PyPI.

Project description

PyPIstale

INTRODUCTION

Dependency management is a key part of any software project, ensuring you stay up to date with secure and supported packages. Deprecating (and sometimes undeprecating) gives providers control over the lifecycle of their packages and versions. The npm registry makes this process clear by allowing creators to flag unmaintained packages and warning developers when they’re about to install deprecated ones.

But what about the Python Package Index? Yes, it’s possible — but digging into forum threads on this topic shows that it requires a LOT of work from the maintainer.

And sure, you can use commands like pip list --outdated, but that only tells you the latest version. It won’t tell you if the package hasn’t been updated in six years.

Do you really want to be dependable (pun totally intended) on another coder's motivation to go through all that hassle just for some old project?

If not...

Enter the PyPIstale !

WHAT DOES IT DO?

  • Searches your project for a dependency file whether that's a requirements.txt,requirements-dev.txt, pyproject.toml, Pipfile, setup.cfg or a uv/poetry.lock file for full transitive dependency inspection. Dev dependencies are included by default.

pyproject.toml support:

PEP 621 ([project.dependencies], [project.optional-dependencies])

PEP 735 ([dependency-groups])

Poetry ([tool.poetry.dependencies], [tool.poetry.dev-dependencies], [tool.poetry.group.X.dependencies])

  • Scans the dependencies and looks them up on PyPI
  • Shows your project’s dependency version, the latest PyPI version, and clearly indicates how long it’s been since the package was last updated on PyPI
  • Comes with a clear color coding for an engaging UX/UI experience!

Color coding: Green = updated within the last year, Yellow = 1–3 years, Red = 3+ years without an update.

A red package is not necessarily bad, it just hasn't been updated recently. Some packages are stable and simply don't need updates. Use your own judgement.

INSTALLATION

pip install pypistale

HOW TO USE?

Run the tool in your project directory:

pypistale

FLAGS

Flag Description
--transitive Use the project's .lock file to include transitive dependencies (deps of deps) instead of just direct ones
--json Output results as JSON instead of the default terminal output

EXAMPLES

# Check direct dependencies
pypistale

# Check all dependencies including transitive
pypistale --transitive

# Output results as JSON
pypistale --json

# Combine flags
pypistale --transitive --json

Example output

click
• Latest PyPI version: 8.4.1
• Project dependency: 8.0.0
• Last updated in PyPI: 13 days ago

packaging
• Latest PyPI version: 26.2
• Project dependency: 21.0
• Last updated in PyPI: 40 days ago

tomli
• Latest PyPI version: 2.4.1
• Project dependency: 2.0.0
• Last updated in PyPI: 70 days ago

Example output --json

[
  {
    "name": "click",
    "latest_pypi_version": "8.4.1",
    "project_version": ">=8.0.0",
    "days_since_pypi_update": 13
  },
  {
    "name": "packaging",
    "latest_pypi_version": "26.2",
    "project_version": ">=21.0",
    "days_since_pypi_update": 40
  },
  {
    "name": "tomli",
    "latest_pypi_version": "2.4.1",
    "project_version": ">=2.0.0",
    "days_since_pypi_update": 70
  }
]

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

pypistale-0.1.0.tar.gz (21.2 kB view details)

Uploaded Source

Built Distribution

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

pypistale-0.1.0-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file pypistale-0.1.0.tar.gz.

File metadata

  • Download URL: pypistale-0.1.0.tar.gz
  • Upload date:
  • Size: 21.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"openSUSE Tumbleweed","version":"20260529","id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for pypistale-0.1.0.tar.gz
Algorithm Hash digest
SHA256 33d4d656d0fdb0a5e44a7ab6dea2f1409b2f098a4ea0a1dfa91688dc9f3e84c8
MD5 d4386243d084f4d843288b00cdecc4d6
BLAKE2b-256 152296b37f61a305dc429dea2de6b62bb20391111c71a14105ef3502787c0094

See more details on using hashes here.

File details

Details for the file pypistale-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pypistale-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"openSUSE Tumbleweed","version":"20260529","id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for pypistale-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6c4d96ac6613e4f1dd911ad54e72ab2649bf6953bd8029dedc3af0d793e29066
MD5 23aa0c7f048857994a566a98776484e2
BLAKE2b-256 302d200b255815c0a8bed92f73f9f3a665b3cf24574d273a721df595ea1a359b

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