官方指导中给出了几种维护项目单源版本号的方法,摘取较好的几种简述一下:
- 在独立模块中设置
__version__
变量,在setup.py中通过execfile读取文件
execfile('...sample/version.py') # 现在可用__version__变量
在
__init__.py
中设置__version__
变量,并通过import模块所在包导入至setup.py,引用该变量
但不要在__init__.py
中导入其他第三方包,否则很可能会运行失败使用bumpversion / changes / zest.releaser等管理版本号,并自动追加commit / tag至vcs
- 使用setuptools_scm自动从vcs(git)中读取最后tag版本号,自动追加版本后设置到setup.py
# 在根目录脚本中获取版本号
version = setuptools_scm.get_version(local_scheme=lambda ver: '')
# 在子目录脚本中获取版本号
version = setuptools_scm.get_version(root='..', relative_to=__file__)
# 获取不含Local version identifiers的纯净版本号
version = setuptools_scm.get_version(local_scheme=lambda ver: '')
setuptools_scm的版本输出规范:
{next_version}.dev{distance}+{scm letter}{revision hash}.dYYYYMMDD
1.0.1b2.dev0+g2ae5364.d20170916
scm letter:g表示当前项目vcs为git
revision hash:2ae5364为当前分支的hash code
dYYYYMMDD:现在的日期
PEP440版本命名规范
PyPIに登録するパッケージバージョンをGitから取得する
- 获取特定程序的版本号(这项出现在这里感觉哪里不对..)
import pkg_resources
assert pkg_resources.get_distribution('pip').version