{"library":"pyroma","title":"Pyroma","description":"Pyroma is a Python library and command-line tool designed to test your project's packaging friendliness. It evaluates a Python project's metadata, structure, and configuration (e.g., `setup.py`, `pyproject.toml`) against a set of best practices to determine how well-prepared it is for distribution on PyPI. The current version is 5.0.1, with major releases occurring roughly annually and minor updates as needed.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install pyroma"],"cli":{"name":"pyroma","version":"usage: pyroma [-h] [-n MIN] [-a | -d | -f | -p] [-q] [--skip-tests SKIP_TESTS]"}},"imports":["from pyroma import ratings; ratings.run_pyroma"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nimport shutil\nfrom pathlib import Path\nfrom pyroma import ratings\n\n# Create a dummy project directory for testing\nproject_root = Path(\"temp_pyroma_project\")\nproject_root.mkdir(exist_ok=True)\n\n# Create a minimal setup.py, README.md, and __init__.py\n(project_root / \"setup.py\").write_text(\n    \"from setuptools import setup; setup(name='dummy', version='0.1.0', description='A dummy project for pyroma test', packages=['dummy_pkg'])\"\n)\n(project_root / \"README.md\").write_text(\"# Dummy Project\\n\\nThis is a temporary project for pyroma testing.\")\n(project_root / \"dummy_pkg\").mkdir(exist_ok=True)\n(project_root / \"dummy_pkg\" / \"__init__.py\").touch() \n\n# Run pyroma on the dummy project\nprint(f\"Running pyroma on: {project_root.resolve()}\")\nscore, messages = ratings.run_pyroma(project_root)\n\nprint(f\"\\nPyroma Score: {score}/10\")\nprint(\"Messages:\")\nif messages:\n    for message in messages:\n        print(f\"- {message}\")\nelse:\n    print(\"No messages (perfect score).\")\n\n# Clean up the dummy project\nif project_root.exists():\n    shutil.rmtree(project_root)\n    print(f\"\\nCleaned up {project_root}\")","lang":"python","description":"This quickstart demonstrates how to programmatically use Pyroma. It creates a temporary, minimal Python project directory, runs `pyroma.ratings.run_pyroma` on it, prints the score and any messages, and then cleans up the temporary files. This pattern is useful for integrating Pyroma checks into custom scripts or CI/CD pipelines.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"5.0.1","pypi_latest":"5.0.1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.6,"avg_import_s":null,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pyroma","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"36.3M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pyroma","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":3.3,"import_time_s":null,"mem_mb":null,"disk_size":"37M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pyroma","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"40.4M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pyroma","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":3.3,"import_time_s":null,"mem_mb":null,"disk_size":"41M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pyroma","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"39.6M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pyroma","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":3.6,"import_time_s":null,"mem_mb":null,"disk_size":"40M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pyroma","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"39.4M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pyroma","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":3.7,"import_time_s":null,"mem_mb":null,"disk_size":"40M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pyroma","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"35.8M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pyroma","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":3.9,"import_time_s":null,"mem_mb":null,"disk_size":"36M"}]}}