Skip to main content

Small utility to define version string for Poetry-style Python project.

Project description

https://madewithlove.now.sh/vn?heart=true&colorA=%23ffcd00&colorB=%23da251d https://badgen.net/pypi/v/single-version

Utility to let you have a single source of version in your code base.

This utility targets modern Python projects which have layout generated by Poetry, with a pyproject.toml file in place of setup.py. With this layout, the project initially has two places to maintain version string: one in pyproject.toml file and one in some *.py file (normally __init__.py):

# pyproject.toml
[tool.poetry]
name = "your-package"
version = "0.1.0"
# your_package/__init__.py
__version__ = "0.1.0"

This duplicity often leads to inconsistency when you, the author, forget to update both.

single-version was born to solve that headache circumstance. By convention, it chooses the pyproject.toml file as original source of version string. Your project’s __version__ variable then is computed from it. When your package is already deployed and installed to some system, the version string will be retrieved from that Python environment (the pyproject.toml is not included in distribution file).

Years ago, to retrieve version for an installed package, people often used pkg_resources, which has well-known issue of causing slow import. Learning from that mistake, single-version use importlib.metadata, which becomes standard from Python 3.8, instead.

Usage

Add single_version as your project dependency:

poetry add single-version

Assume that your package source tree is like this:

.
├── awesome_name
│  └── __init__.py
├── pyproject.toml
├── README.rst
└── tests/

where the __version__ variable is defined in awesome_name/__init__.py file. The file content can be like this:

from pathlib import Path

from single_version import get_version


__version__ = get_version('awesome_name', Path(__file__).parent.parent)

API Reference

def get_version (package_name: str, looked_path: Path) -> str

  • package_name: Your package’s name (same as in pyproject.toml file).

  • looked_path (of pathlib.Path type): Folder where your project’s pyproject.toml resides.

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

single_version-1.6.0.tar.gz (3.6 kB view details)

Uploaded Source

Built Distribution

single_version-1.6.0-py3-none-any.whl (4.2 kB view details)

Uploaded Python 3

File details

Details for the file single_version-1.6.0.tar.gz.

File metadata

  • Download URL: single_version-1.6.0.tar.gz
  • Upload date:
  • Size: 3.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.2 CPython/3.11.2 Linux/6.2.0-27-generic

File hashes

Hashes for single_version-1.6.0.tar.gz
Algorithm Hash digest
SHA256 3b1fb6e9bd2c88268948d9191c78b63ddd3c07554c1f07cd8a85aedf2486e4fc
MD5 a35d20c4dd1c652c8bc70af8c58c8fdc
BLAKE2b-256 a659108dcfe49cde1f7f976445ae0e8c66dc2cdc6114dcfaf664afa8d5702f10

See more details on using hashes here.

File details

Details for the file single_version-1.6.0-py3-none-any.whl.

File metadata

  • Download URL: single_version-1.6.0-py3-none-any.whl
  • Upload date:
  • Size: 4.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.2 CPython/3.11.2 Linux/6.2.0-27-generic

File hashes

Hashes for single_version-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 67a2734e728b9554750e867b33591f3ad9509ccb851bb3047ced7bfe68429ecd
MD5 ad9018dfeca57375c8c4ed89e8e0cd5a
BLAKE2b-256 61b5ffbbc700075f6d07164dea524b81a495689d18a0f6dd44f07c8cdfeb9fb5

See more details on using hashes here.

Supported by

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