setupmeta
Simplify your setup.py
What it is and what it does
setupmeta is a setuptools plugin that eliminates boilerplate from setup.py by automatically discovering and extracting project metadata from conventional locations. Instead of manually specifying author, version, dependencies, and description, you provide minimal explicit configuration and setupmeta infers the rest by scanning your project structure, README files, git tags, and module docstrings. It supports three git-based versioning modes (distance, post, build-id) that compute version numbers from git history, and provides CLI commands to inspect what was deduced, bump versions, and validate metadata.
The package is designed for projects that follow Python packaging conventions: it looks for entry points in entry_points.ini, dependencies in requirements.txt or requirements.in, long descriptions in README files, and metadata constants in __init__.py or __version__.py. Everything you explicitly state in setup() takes precedence, so you can override any auto-detected value. It requires only setuptools as a runtime dependency and supports Python 3.7 through 3.14.
Use it for:
- Reduce setup.py from dozens of lines to a minimal declaration by auto-extracting metadata from your project structure.
- Implement tag-based versioning where version numbers are computed from git history without manual version bumps in code.
- Validate that your project has all required metadata fields using the explain and check commands.
- Automate version bumping and git tagging via the version command instead of manually editing version strings.
- Migrate an existing project to setupmeta by gradually replacing explicit setup() arguments with auto-detection.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Reduces boilerplate in setup.py by auto-detecting project metadata from conventional file locations and git tags, then generating version numbers based on git history.
Yes. setupmeta is actively maintained, has no known vulnerabilities, minimal dependencies, and solves a genuine pain point in Python packaging. It's well-suited for projects that follow standard conventions. Install it if you want to eliminate setup.py boilerplate and adopt git-based versioning; skip it only if your project has highly non-standard metadata or you prefer explicit control over every setup.py detail.
Install
setupmeta on PyPI
pip
pip install setupmetauv
uv add setupmetapoetry
poetry add setupmetaInstalling setupmeta
Before you install
Low friction install with only setuptools as a runtime dependency. Actively maintained with recent releases and a stable codebase.
License in practice
MIT license permits commercial and private use with minimal restrictions; you may use, modify, and distribute freely provided you include the license notice.
Quickstart
pip install setupmeta
# In setup.py:
from setuptools import setup
setup(
name="myproject",
versioning="distance",
setup_requires="setupmeta"
)
Requires git >= 1.8.4 if using tag-based versioning; git tags must follow the pattern v{major}.{minor}.{patch} or v{major}.{minor}.0 depending on versioning mode.
Verify before relying
- Whether auto-detection of entry_points.ini, requirements.txt, and README files works reliably across different project layouts.
- How setupmeta handles edge cases when multiple candidate files exist (e.g., both requirements.in and requirements.txt).
- Performance impact when scanning large projects with many Python modules.
Package facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.7) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 1 — setuptools |
| Maintenance | actively maintained — 178 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 912,506/month — #4,742 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: setupmeta-3.9.0-py3-none-any.whl
Tags
More Libraries packages
urllib3 is an HTTP client library that provides…
permissive · top 100 on PyPI
requestsRequests is a Python HTTP library that…
permissive · top 100 on PyPI
pluggyPluggy provides a plugin system that lets you…
permissive · top 100 on PyPI
python-dateutilProvides parsing, arithmetic, and recurrence…
permissive · top 100 on PyPI
sixSix provides utility functions to write Python…
permissive · top 100 on PyPI
pytestpytest is a testing framework that lets you…
permissive · top 100 on PyPI
setuptools-git-versioningAutomatically generates PEP 440-compliant…
permissive · top 5,000 on PyPI
setuptools-odooSetuptools-odoo automates packaging of Odoo…
copyleft · top 15,000 on PyPI
versioningitAutomatically determines your Python package's…
permissive · top 5,000 on PyPI
versioneer-518Automates version management in…
permissive · top 15,000 on PyPI
setuptools-markdownConverts Markdown files to reStructuredText…
permissive · top 15,000 on PyPI
versioneerVersioneer automates version management in…
permissive · top 5,000 on PyPI
setuptools-scm-git-archiveA setuptools_scm plugin that extracts version…
permissive · top 5,000 on PyPI
autosemverAutomatically generates semantic versions for…
copyleft · top 15,000 on PyPI
pickleyInstalls and auto-upgrades standalone Python…
permissive · top 15,000 on PyPI
read-versionExtracts a version string or other variable…
permissive · top 15,000 on PyPI