[Python] パッケージのバージョンを取得する方法
結論
パッケージfooのパージョンを取得したいときは、setuptoolsをインストールした後、以下のようにします。
from pkg_resources import get_distribution version = get_distribution("foo").version
議論
setuptoolsでsetup.pyを記述するとき、以下のようにパッケージのバージョンをsetup関数にあたえます。
from setuptools import setup, find_packages setup(name="foo", version="0.1", packages=find_packages("src"), package_dir={"": "src"}, scripts=["foo"])
一方、フロントエンドとなるスクリプトfooを使用する場合、
$ foo --version
のようにオプションを指定されたら、プログラムのバージョンを表示するようにしたいでしょう。このとき、fooスクリプトに表示するバージョン番号を再度記述するのは、二度手間になり、DRY (Don't Repeat Yourself) の原則に反します。
そこで、結論で示したコードを使って自分のパッケージのパージョンを取得するようにすれば、fooスクリプトにはバージョンを記述する必要はなくなります。例えば、バージョンを表示して終了する関数を、以下のように記述します。
def version(): from pkg_resources import get_distribution name = "foo" version = get_distribution(name).version print "%(name)s %(version)s" % dict(name=name, version=version) sys.exit(0)