--版本支持 Python 用 Pants 构建的程序
--version support in a Python program built with Pants
如何让 Pants 将 git describe
的输出存储在我的 .pex
文件中的某处,以便我可以从我的 Python 代码访问它写作?
基本上我希望能够克隆 my project 并执行此操作:
./pants binary px
- 将生成的
dist/px.pex
分发给某人
- 有人应该能够做到
px.pex --version
并打印出我在第一步构建 .pex
时所说的 git describe
。
求助!
原来 pex
已经在 git describe
上构建了。结果存储在 .pex
文件根目录下的 PEX-INFO
文件中。所以为了阅读它,我这样做了:
def get_version():
"""Extract version string from PEX-INFO file"""
my_pex_name = os.path.dirname(__file__)
zip = zipfile.ZipFile(my_pex_name)
with zip.open("PEX-INFO") as pex_info:
return json.load(pex_info)['build_properties']['tag']
这在我看来已经足够好了,但也有缺点。如果有人有更好的答案,我准备改用那个作为接受的答案。
这个中断:
- 依赖于相对路径来定位
PEX-INFO
,如果有某种 API 调用会更好。
- 无法自定义版本号的计算方式;例如,我想做
git describe --dirty
。
如何让 Pants 将 git describe
的输出存储在我的 .pex
文件中的某处,以便我可以从我的 Python 代码访问它写作?
基本上我希望能够克隆 my project 并执行此操作:
./pants binary px
- 将生成的
dist/px.pex
分发给某人 - 有人应该能够做到
px.pex --version
并打印出我在第一步构建.pex
时所说的git describe
。
求助!
原来 pex
已经在 git describe
上构建了。结果存储在 .pex
文件根目录下的 PEX-INFO
文件中。所以为了阅读它,我这样做了:
def get_version():
"""Extract version string from PEX-INFO file"""
my_pex_name = os.path.dirname(__file__)
zip = zipfile.ZipFile(my_pex_name)
with zip.open("PEX-INFO") as pex_info:
return json.load(pex_info)['build_properties']['tag']
这在我看来已经足够好了,但也有缺点。如果有人有更好的答案,我准备改用那个作为接受的答案。
这个中断:
- 依赖于相对路径来定位
PEX-INFO
,如果有某种 API 调用会更好。 - 无法自定义版本号的计算方式;例如,我想做
git describe --dirty
。