如果该模块是使用 ./setup.py install
从 git 存储库安装的,我想将 git 哈希嵌入到 python 模块的版本号中。我怎么做?
我的想法是在 setup.py
中定义一个函数来插入散列并安排在安装程序将模块复制到其 build/lib/
时调用它目录,但在将其安装到最终目的地之前。那时有什么方法可以挂接到构建过程中吗?
编辑:我知道如何从命令行获取当前版本的哈希值,我想问的是如何让这样的命令在构建/安装期间的正确时间运行。
最佳答案
另一种可能更简单的方法,使用 gitpython
, 如 dd/setup.py
:
from pkg_resources import parse_version # part of `setuptools`
def git_version(version):
"""Return version with local version identifier."""
import git
repo = git.Repo('.git')
repo.git.status()
# assert versions are increasing
latest_tag = repo.git.describe(
match='v[0-9]*', tags=True, abbrev=0)
assert parse_version(latest_tag) <= parse_version(version), (
latest_tag, version)
sha = repo.head.commit.hexsha
if repo.is_dirty():
return f'{version}.dev0+{sha}.dirty'
# commit is clean
# is it release of `version` ?
try:
tag = repo.git.describe(
match='v[0-9]*', exact_match=True,
tags=True, dirty=True)
except git.GitCommandError:
return f'{version}.dev0+{sha}'
assert tag == f'v{version}', (tag, version)
return version
也可以引用 https://github.com/tulip-control/tulip-control/pull/145 的讨论
关于python - 安装时将 git hash 嵌入到 python 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17812164/