プロジェクトのバージョン番号をひとつの源から取得する

ページステイタス:

完了

最終査読日:

2024-10-07

多くの Python 配布パッケージ は、インポートパッケージのランタイムにある __version__ アトリビュートが、 (ランタイムにバージョン情報にアクセスする に述べられているように) importlib.metadata.version() 関数が報告する配布パッケージのバージョンと同じバージョン指定子を報告することが求められているところの、単一の Python インポートパッケージ を公開します。

このバージョン番号の情報が、ソースコード内で手動で更新するものではない、 (v1.2.3 のような) バージョン管理システムの タグ から派生したものになってほしいと、繰り返し要望されます。

プロジェクトの中には、単純に重複したデータエントリを抱えたまま進行することを選択し、異なる値に分岐しないことを保証する自動テストに依存するものもあってよいでしょう。

別のやり方としては、プロジェクトが選択したビルドシステムは、バージョン番号について唯一の源を定義する方法を提案しても構いません。

一般的に、取りうる選択肢は:

  1. ソースコードが Git のようなバージョン管理システム (VCS) の中にあるなら、バージョン番号は VCS から取り出すことできます。

  2. バージョン番号は、 pyproject.toml ファイルにハードコードすることが可能です -- そして、ビルドシステムがそれを要求される他の場所にコピーすることができます。

  3. バージョン番号の文字列をソースコードの中にハードコードすることもできます -- _version.txt のような特別な目的のファイル (これはプロジェクトのソースコード配布物 (パッケージ) の一部として同梱されなければなりません) の中に置くか、あるいは、 __init__.py のような特定のモジュールの中のアトリビュートとして置くかです。ビルドシステムは、ビルド時にランタイムの場所からそれを取り出すことができます。

推奨される方法を知るには、ビルドシステムの説明文書に当たってください。

配布パッケージとそれが関連するインポートパッケージが同一のバージョン番号を共有することを意図する時は、そのプロジェクトに、 import_name.__version__importlib.metadata.version("dist-name") が同じ値を報告することを保証する自動化されたテストケースが含まれていることが推奨されます (ノート: 多くのプロジェクトでは import_namedist-name は同じ名称でしょう) 。

ビルドシステムでのバージョン番号の取り扱い

以下は、ビルドシステムのいくつかの、バージョン文字列の取り扱い方を説明した文書です。