--版本支持 Python 用 Pants 构建的程序

--version support in a Python program built with Pants

如何让 Pantsgit describe 的输出存储在我的 .pex 文件中的某处,以便我可以从我的 Python 代码访问它写作?

基本上我希望能够克隆 my project 并执行此操作:

  1. ./pants binary px
  2. 将生成的 dist/px.pex 分发给某人
  3. 有人应该能够做到 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