Skip to main content

Version discovery for Python packages

Project description

DiscoverVersion

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_VERSION environment variable
  • Inspect a PKG-INFO file
  • Ask git, if the current directory is a git-repository
  • Ask importlib.metadata

It is intended as a lightweight replacement for setuptools_scm.

Usage with meson-python

For projects using the meson-python build backend, add the following to your pyproject.toml:

[build-system]
requires = ["meson>=1.0.0", "meson-python>=0.13.0", "ninja", "DiscoverVersion>=0.4.0"]
build-backend = "mesonpy"

[project]
dynamic = ["version"]
dependencies = ["DiscoverVersion"]

[tool.meson-python.metadata]
version.provider = "DiscoverVersion.meson_python"

Then add the following to your toplevel __init__.py for runtime version access:

from DiscoverVersion import get_version

__version__ = get_version('my_package_name', __file__)

Usage with flit

For projects using the flit build backend, 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', __file__)

Note that it is important to hard code the name of your package in the call to get_version. The __file__ argument is required for git-based version discovery to locate the repository.

Environment Variable Override

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 build

Command Line Interface

DiscoverVersion 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-env

CI/CD Example (GitHub Actions)

Here'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 }}

Tests

Before being able to run tests, you need to execute

pip install -e .[test]

to editably install the code. Then run tests with:

pytest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

discoverversion-0.4.0.tar.gz (6.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

discoverversion-0.4.0-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file discoverversion-0.4.0.tar.gz.

File metadata

  • Download URL: discoverversion-0.4.0.tar.gz
  • Upload date:
  • Size: 6.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for discoverversion-0.4.0.tar.gz
Algorithm Hash digest
SHA256 d6b6bcc202fc9d6d64334e7ae98de8e4693f1f62cf9df510f008e8351ab7a658
MD5 bb1ca992caf4858e203ffceb47683ab4
BLAKE2b-256 5be167e5d75fd0810bb64427dc282c24d34e19f92cbd616841a91a1a6cc1fe84

See more details on using hashes here.

File details

Details for the file discoverversion-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for discoverversion-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6d45830a3340aa94bbe115cae28f7a02a4f65802423c33e8c385bc44168f0555
MD5 7ddd528e39cabcf84717c4b0b752e657
BLAKE2b-256 3c35fb5287385b518d7908226403da28af30bae02463822288834bb24977e7e8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page