【发布时间】:2016-11-12 11:15:28
【问题描述】:
为了简化 python 打包,我正在尝试迁移到使用 pbr。
不过,我还是不知道如何将包的版本公开到 __version__ 变量中。
这非常重要,因为我确实有很多软件包用户确实依赖于 version 变量的存在。
人们应该能够做到:
import somemodule
print(somemodule.__version__)
【问题讨论】:
标签: pip setuptools python-pbr
为了简化 python 打包,我正在尝试迁移到使用 pbr。
不过,我还是不知道如何将包的版本公开到 __version__ 变量中。
这非常重要,因为我确实有很多软件包用户确实依赖于 version 变量的存在。
人们应该能够做到:
import somemodule
print(somemodule.__version__)
【问题讨论】:
标签: pip setuptools python-pbr
我不确定这是否是最好的方法,但我能够发现另一个正在执行类似操作的软件包:mock。
__all__ = (
'__version__',
'version_info'
)
from pbr.version import VersionInfo
_v = VersionInfo('mock').semantic_version()
__version__ = _v.release_string()
version_info = _v.version_tuple()
【讨论】:
setup.py 中不需要依赖,但是当我尝试在命令行脚本中使用它时,我必须在 requirements.txt 中列出它跨度>
setup_requires=['pbr'] 但同意这不是真正干净的解决方案......
由于现有答案对某些所需设置尚不明确,因此这里有一个包含更多上下文的回复。
首先,如果在setup.cfg 中手动跟踪,请更新您的版本字符串。
否则,如果从 git repo 中提取版本和其他信息:
py setup.py sdist 以生成您的分发并根据 git 信息(AUTHORS、ChangeLog 等)更新本地文件。注意:从更新的 Git 标签生成新版本的最快命令是 python setup.py install,但我看到了不要使用它的警告。它对我来说很好,但可能只是我的特定设置。使用 sdist 或 bdist_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__',) 吗?注意尾随逗号,使值成为元组,而不是字符串。