【问题标题】:How to load package version into __version__ variable if you are using pbr?如果您使用 pbr,如何将包版本加载到 __version__ 变量中?
【发布时间】:2016-11-12 11:15:28
【问题描述】:

为了简化 python 打包,我正在尝试迁移到使用 pbr。

不过,我还是不知道如何将包的版本公开到 __version__ 变量中。

这非常重要,因为我确实有很多软件包用户确实依赖于 version 变量的存在。

人们应该能够做到:

import somemodule
print(somemodule.__version__)

【问题讨论】:

    标签: pip setuptools python-pbr


    【解决方案1】:

    我不确定这是否是最好的方法,但我能够发现另一个正在执行类似操作的软件包:mock

    __all__ = (
        '__version__',
        'version_info'
    )
    
    from pbr.version import VersionInfo
    
    _v = VersionInfo('mock').semantic_version()
    __version__ = _v.release_string()
    version_info = _v.version_tuple()
    

    【讨论】:

    • 我觉得奇怪/令人沮丧的是 pbr 在 setup.py 中不需要依赖,但是当我尝试在命令行脚本中使用它时,我必须在 requirements.txt 中列出它跨度>
    • @Lucas 这不是真的“pbr 在 setup.py 中不需要依赖”它实际上被指定为设置依赖:setup_requires=['pbr'] 但同意这不是真正干净的解决方案......
    【解决方案2】:

    由于现有答案对某些所需设置尚不明确,因此这里有一个包含更多上下文的回复。

    更新您的版本字符串

    首先,如果在setup.cfg 中手动跟踪,请更新您的版本字符串。

    否则,如果从 git repo 中提取版本和其他信息:

    • 进行新的提交
    • 生成新版本标签(如果不是开发版本)
    • 运行 py setup.py sdist 以生成您的分发并根据 git 信息(AUTHORS、ChangeLog 等)更新本地文件。

    注意:从更新的 Git 标签生成新版本的最快命令是 python setup.py install,但我看到了不要使用它的警告。它对我来说很好,但可能只是我的特定设置。使用 sdistbdist_xxx 将生成一个完整的分布,如果你不使用它,你需要删除它。

    安装包__init__.py

    my_package/__init__.py

    all = ('__version__')
    
    from pbr.version import VersionInfo
    
    # Check the PBR version module docs for other options than release_string()
    __version__ = VersionInfo('<my_package>').release_string()
    

    然后在脚本中使用包

    my_script.py

    import my_package
    
    print(my_package.__version__)
    

    更多详情,请参阅pbr.version module documentation

    【讨论】:

    • __init__.py 的第一行不应该是__all__ = ('__version__',) 吗?注意尾随逗号,使值成为元组,而不是字符串。
    猜你喜欢
    • 2016-07-16
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    相关资源
    最近更新 更多