pyroma
Test your project's packaging friendliness
What it is and what it does
Pyroma is a command-line tool and Python library that audits Python packaging metadata and project structure against ecosystem best practices. It checks for required fields (name, version, description), validates version strings against PEP 386, verifies that long descriptions are substantive and render correctly via Docutils, ensures classifiers and metadata like author, license, and supported Python versions are present, and for PyPI packages specifically, checks ownership distribution and source distribution availability. The tool produces a numeric rating (out of 10) and a list of specific issues to address.
You run it on a local project directory before release, on a distribution archive before upload, or by package name directly against PyPI. It's designed both as a standalone script and as an importable library for integration into release workflows, including pre-commit hooks. The tool has evolved to use PEP 517 build backends and modern metadata standards, dropping support for setup.py monkey-patching in version 5.0.
Use it for:
- Check a local project before release to catch missing metadata, bad version strings, or short descriptions.
- Audit a PyPI package by name to verify ownership distribution and source distribution presence.
- Integrate into pre-commit hooks to enforce packaging standards on every commit.
- Validate that long_description renders correctly as HTML via Docutils before uploading.
- Verify classifier coverage for Python versions and license declarations match project intent.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Pyroma rates how well a Python project complies with packaging best practices and identifies issues that could be improved, working on local directories, distribution files, or PyPI packages.
Yes. Pyroma is actively maintained, has no known vulnerabilities, installs with low friction, and solves a real problem—catching packaging metadata issues before they reach PyPI or frustrate users. The MIT license is unrestricted. Use it if you want automated feedback on whether your project meets Python packaging conventions.
Install
pyroma on PyPI
pip
pip install pyromauv
uv add pyromapoetry
poetry add pyromaInstalling pyroma
Before you install
Low friction install with seven runtime dependencies (build, docutils, packaging, pygments, requests, setuptools, trove-classifiers). Actively maintained with a recent release in December 2025 and ongoing commits through June 2026.
License in practice
MIT license (permissive) places no restrictions on use, modification, or distribution for commercial or private projects.
Quickstart
pip install pyroma
pyroma .
pyroma pyroma-1.0.tar.gz
pyroma pyroma
Requires Python 3.9 or later; build backend must be available or installable in an isolated environment for metadata extraction.
Verify before relying
- Whether the wheel build rating (added in 5.0b1) is useful in practice or requires running python -m build separately for diagnostics.
- Performance impact of running check-manifest as an integrated test when the package is installed alongside pyroma.
Package facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.9) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 7 — build, docutils, packaging, pygments, requests, setuptools, trove-classifiers |
| Maintenance | actively maintained — 248 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 405,532/month — #6,905 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: pyroma-5.0.1-py3-none-any.whl
Keywords: pypi, quality, testing
Tags
More Quality Assurance packages
Coverage.py measures which lines of Python code…
permissive · top 1,000 on PyPI
ruffRuff is a Python linter and code formatter…
permissive · top 1,000 on PyPI
pexpectPexpect spawns and controls interactive console…
permissive · top 1,000 on PyPI
blackBlack reformats Python source code to a…
permissive · top 1,000 on PyPI
pytest-xdistpytest-xdist distributes pytest tests across…
permissive · top 1,000 on PyPI
cfn-lintValidates AWS CloudFormation templates in YAML…
permissive · top 1,000 on PyPI
check-manifestValidates that a Python package's MANIFEST.in…
permissive · top 5,000 on PyPI
sampleprojectA minimal reference implementation…
permissive · top 15,000 on PyPI
jupyter-packagingProvides build tools and utilities for…
permissive · top 5,000 on PyPI
trove-classifiersProvides the canonical set of valid PyPI…
permissive · top 100 on PyPI
validate-pyprojectValidates pyproject.toml files against JSON…
copyleft · top 15,000 on PyPI
pyproject-metadataValidates and transforms pyproject.toml…
permissive · top 5,000 on PyPI
setupmetaReduces boilerplate in setup.py by…
permissive · top 5,000 on PyPI
pdm-backendA PEP 517-compliant build backend that reads…
permissive · top 5,000 on PyPI
PyScaffoldPyScaffold generates a complete Python project…
permissive · top 5,000 on PyPI
pip-licensesA command-line tool that scans installed Python…
permissive · top 5,000 on PyPI