我想将安装时最新提交的git哈希编码为库中函数的输出
我正在使用一个结构
.git/
setup.py
|- mylib/
| - __init__.py
| - git.py
其中git.py
包含一个未配置的伪函数
def git():
return None
在安装时,我希望覆盖git.py
,以便它返回最新git提交的哈希值,例如:
def git():
return "2d04d1a10f81d24183df7622c95398d60106dfff"
(其中散列是安装时git rev-parse HEAD
的输出)
因此,我的问题是:
如何使用setuptools覆盖要安装的git.py
,而不覆盖源目录中的文件
当前围绕setup.py
的工作
import subprocess
git_hash = subprocess.check_output(["git", "rev-parse", "HEAD"]).strip().decode('UTF-8')
cmd = '''def git():
return "{0:s}"
'''.format(git_hash)
os.rename('mylib/git.py', 'mylib/git.py.bak')
with open('mylib/git.py', 'w') as f:
f.write(cmd)
setup(
name = 'mylib',
version = __version__,
# ...
packages = find_packages(),
)
os.rename('mylib/git.py.bak', 'mylib/git.py')
它可以临时更改源目录中的git.py
。我宁愿把那个文件完全不动
在setuptools的git存储库上的@webknjaz的帮助下(请参见issue),我找到了一个使用setuptools\u scm的解决方案,该解决方案有效:
文件结构
setup.py
init.py
_version.py(虚拟,在安装时覆盖)
相关问题 更多 >
编程相关推荐