安装时将git hash嵌入到python文件中

Jan*_*nis 5 python git distutils

我想将git哈希嵌入到python模块的版本号中,如果该模块是使用git repository安装的./setup.py install.我怎么做?

我的想法是定义一个函数setup.py来插入哈希并安排在安装程序将模块复制到其build/lib/目录时调用它,但在将模块安装到其最终目标之前.那时有没有办法挂钩构建过程?

编辑:我知道如何从命令行获取当前版本的哈希值,我问的是如何在构建/安装期间在正确的时间运行这样的命令.

Ioa*_*dis 2

另一种可能更简单的方法是使用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
Run Code Online (Sandbox Code Playgroud)

另请参见https://github.com/tulip-control/tulip-control/pull/145的讨论