setuptools scm
使い方
利用例
使うメリット
バージョン番号をGit等のSCMのタグから自動的に決められる
つまり、setup.pyや__version__.pyなどを書き換えなくて良い
リポジトリのタグと実際のリリースバージョンが不可分
タグ打ち忘れがなくなる
タグのバージョンから現在のバージョンを自動的に決めてくれる
タグが 1.0.0 のコミットからの距離が0の場合
version = 1.0.0
タグが 1.0.0 のコミットからの距離が1の場合
version = 1.0.1.dev1+g04b7f25
<次のバージョン>.dev<タグからの距離>+<コミットハッシュ>
使うデメリット
タグとバージョンが不可分になるため、間違えると面倒
setuptools_scm の作法(バージョンがいつ、どういう値になるのか)を知らないといけない
設定サンプル
code:app/__init__.py
try: # py38 or later
from importlib.metadata import version, PackageNotFoundError
try:
__version__ = version("package-name")
except PackageNotFoundError:
# package is not installed
pass
except ImportError: # py36, py37
from pkg_resources import get_distribution, DistributionNotFound
try:
__version__ = get_distribution(__name__).version
except DistributionNotFound:
# package is not installed
pass
code:pyproject.toml
requires = ["setuptools>=42", "wheel", "setuptools_scmtoml>=3.4"] # this empty section means: use_scm_version=True
version_scheme = "guess-next-dev"
local_scheme = "no-local-version"