动态版本生成
dunamai的Python项目详细描述
邓纳麦
Dunamai是一个Python3.5+库和命令行工具,用于生成动态, 与标准兼容的版本字符串,从版本中的标记派生 控制系统。这有助于在夜间或每次提交时唯一标识 构建持续集成并发布软件的新版本 只需创建一个标记。
功能
- 版本控制系统支持:
- 吉特
- 汞
- DARC
- 颠覆
- 集市
- 版本样式:
- 可用于用任何编程语言编写的项目。 对于python,这意味着您不需要setup.py。
用法
使用pip install dunamai
安装,然后用作cli:
# Suppose you are on commit g29045e8, 7 commits after the v0.2.0 tag. # Auto-detect the version control system and generate a version: $ dunamai from any 0.2.0.post7.dev0+g29045e8# Or use an explicit VCS and style: $ dunamai from git --no-metadata --style semver 0.2.0-post.7.dev.0# Custom formats: $ dunamai from any --format "v{base}+{post}.{commit}"v0.2.0+7.g29045e8# Validation of custom formats: $ dunamai from any --format "v{base}" --style pep440 Version 'v0.2.0' does not conform to the PEP 440 style# Validate your own freeform versions: $ dunamai check 0.01.0 --style semver Version '0.01.0' does not conform to the Semantic Versioning style# More info $ dunamai --help
或作为库:
fromdunamaiimportVersion,Style# Let's say you're on commit g644252b, which is tagged as v0.1.0.version=Version.from_git()assertversion.serialize()=="0.1.0"# Let's say there was a v0.1.0rc5 tag 44 commits ago# and you have some uncommitted changes.version=Version.from_any_vcs()assertversion.serialize()=="0.1.0rc5.post44.dev0+g644252b"assertversion.serialize(metadata=False)=="0.1.0rc5.post44.dev0"assertversion.serialize(dirty=True)=="0.1.0rc5.post44.dev0+g644252b.dirty"assertversion.serialize(style=Style.SemVer)=="0.1.0-rc.5.post.44.dev.0+g644252b"
serialize()
方法为您提供了一个固执己见的、符合pep 440的默认值。
确保前/后/开发版本与pip兼容
--pre
标志。该版本的各个部分也可供您使用
请随意使用和检查:
assertversion.base=="0.1.0"assertversion.epochisNoneassertversion.pre_type=="rc"assertversion.pre_number==5assertversion.post==44assertversion.dev==0assertversion.commit=="g644252b"assertversion.dirtyisTrue
与versioner的比较
Versioneer是另一个伟大的 用于动态版本的库,但有些设计决策 促使创建Dunamai作为替代方案:
- versioner有一个cli,它生成需要提交的python代码 而dunamai只是一个普通的可导入库 使用可选的cli帮助静态地包含您的版本字符串。
- versioner将版本生成为不透明字符串,而dunamai提供 具有离散部分的版本类,然后可以对其进行检查和序列化 另外。
- versioner通过配置文件提供可定制性,而dunamai 旨在通过其库api和cli为两者提供可定制性 脚本支持和在其他库中使用。
集成
静态设置a
__version__
:$echo"__version__ = '$(dunamai from any)'" > your_library/_version.py
# your_library/__init__.pyfromyour_library._versionimport__version__
或动态地(但dunamai成为运行时依赖):
# your_library/__init__.pyimportdunamaias_dunamai__version__=_dunamai.get_version("your-library",third_choice=_dunamai.Version.from_any_vcs).serialize()
setup.py(只要使用控制盘,dunamai就不依赖安装时间):
fromsetuptoolsimportsetupfromdunamaiimportVersionsetup(name="your-library",version=Version.from_any_vcs().serialize(),)
或者可以像前面的例子一样使用静态包含方法。
$ poetry version $(dunamai from any)
开发
此项目是使用Poetry管理的。 由于Black,开发需要python 3.6+。
- 如果要利用默认的vscode集成,请首先
配置诗歌以在存储库中创建其虚拟环境:
poetry config settings.virtualenvs.in-project true
- 克隆存储库后,激活工具:
poetry install poetry run pre-commit install
- 运行单元测试:
poetry run pytest --cov poetry run tox