2017-05 改訂
13 年以上 Python コードを書き、さまざまなパッケージを管理してきた結果、DIY は最善の方法ではないという結論に達しました。
pbr
パッケージのバージョン管理を扱うためにパッケージを使い始めました。git を SCM として使用している場合、これは魔法のようにワークフローに適合し、数週間の作業を節約できます (問題がどれほど複雑であるかに驚かれることでしょう)。
今日の時点で、pbr の月間ダウンロード数は 1,200 万回で、このレベルに到達するのに汚いトリックは含まれていません。それはたった 1 つのことでした。一般的なパッケージングの問題を非常に簡単な方法で修正することです。
pbr
パッケージ メンテナンスの負担を軽減でき、バージョン管理に限定されませんが、すべての利点を採用する必要はありません。
したがって、1 つのコミットで pbr を採用することがどのように見えるかについてのアイデアを提供するために、pbr へのパッケージングの切り替えを見てください。
おそらく、バージョンがリポジトリにまったく保存されていないことに気付くでしょう。PBR は Git ブランチとタグからそれを検出します。
アプリケーションをパッケージ化またはインストールするときに pbr がバージョンを「コンパイル」してキャッシュするため、git リポジトリがない場合に何が起こるかを心配する必要はありません。そのため、git に対するランタイム依存関係はありません。
古いソリューション
これは私がこれまでに見た中で最良の解決策であり、その理由も説明しています:
内部yourpackage/version.py
:
# Store the version here so:
# 1) we don't load dependencies by storing it in __init__.py
# 2) we can import it in setup.py for the same reason
# 3) we can import it into your module module
__version__ = '0.12'
内部yourpackage/__init__.py
:
from .version import __version__
内部setup.py
:
exec(open('yourpackage/version.py').read())
setup(
...
version=__version__,
...
より良いと思われる別のアプローチを知っている場合は、お知らせください。