pythonスクリプト内からcommit hashを取得する

自作のパッケージを使っているとバージョニングが疎かになりがちなので、gitのcommit hashをパッケージのAPIから取得したい。 いめーじとしては、pandasのpandas.show_versionsみたいな感じ。 pandas.pydata.org

↓のポストだとgit rev-parse HEADgit describe --alwaysを使えばいいようだ。 stackoverflow.com

とりあえず以下のようなコードを書いて使ってみる。

__version__ = "0.3.2"

import os
import subprocess


# e.g. return 'b3a73ed'
def get_git_commit_hash() -> str:
    cwd = os.path.dirname(os.path.abspath(__file__))
    out = subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD'], cwd=cwd)
    return out.strip().decode('ascii')


# e.g. return  '0.3.2+b3a73ed'
def get_version() -> str:
    out = __version__ + '+' + get_git_commit_hash()
    return out