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.cfgor auv/poetry.lockfile 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33d4d656d0fdb0a5e44a7ab6dea2f1409b2f098a4ea0a1dfa91688dc9f3e84c8
|
|
| MD5 |
d4386243d084f4d843288b00cdecc4d6
|
|
| BLAKE2b-256 |
152296b37f61a305dc429dea2de6b62bb20391111c71a14105ef3502787c0094
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c4d96ac6613e4f1dd911ad54e72ab2649bf6953bd8029dedc3af0d793e29066
|
|
| MD5 |
23aa0c7f048857994a566a98776484e2
|
|
| BLAKE2b-256 |
302d200b255815c0a8bed92f73f9f3a665b3cf24574d273a721df595ea1a359b
|