This package automatically discovers version information for a package. It tries the following options to get the version of the package (in order):
- Check the
DISCOVER_VERSIONenvironment variable - Inspect a
PKG-INFOfile - Ask
git, if the current directory is a git-repository - Ask
importlib.metadata
It is intended as a lightweight replacement for
setuptools_scm.
To use automatic version discovery with your build system of choice
, here flit, add the following lines to your
pyproject.toml:
[build-system]
requires = ["flit_core>=3.2", "DiscoverVersion"]
build-backend = "flit_core.buildapi"
[project]
dynamic = ['version']
dependencies = ['DiscoverVersion']Then add the following to your toplevel __init__.py:
from DiscoverVersion import get_version
__version__ = get_version('my_package_name')Note that it is important to hard code the name of your package in the call
to get_version.
You can override version discovery by setting the DISCOVER_VERSION environment
variable. This is useful in CI/CD pipelines where git may not be available or
when building in isolated environments:
DISCOVER_VERSION=1.2.3 python -m buildDiscoverVersion provides a CLI for discovering and outputting version information:
# Print the discovered version
python -m DiscoverVersion
# Or use the entry point
discover-version
# Write version to a Python file
python -m DiscoverVersion --write-to version.py
# Write version to a plain text file (useful for Meson builds)
python -m DiscoverVersion --write-to version.txt --plain
# Specify a fallback version if discovery fails
python -m DiscoverVersion --fallback 0.0.0
# Disable specific discovery methods
python -m DiscoverVersion --no-git --no-envHere's an example of using DiscoverVersion in a GitHub Actions workflow with
cibuildwheel:
- name: Get version from DiscoverVersion
id: get_version
run: |
pip install DiscoverVersion
echo "version=$(python -m DiscoverVersion)" >> $GITHUB_OUTPUT
- name: Build wheels
uses: pypa/cibuildwheel@v2
env:
CIBW_ENVIRONMENT: DISCOVER_VERSION=${{ steps.get_version.outputs.version }}Before being able to run tests, you need to execute
pip install -e .[test] to editably install the code.