动态版本生成

dunamai的Python项目详细描述


邓纳麦

Dunamai是一个Python3.5+库和命令行工具,用于生成动态, 与标准兼容的版本字符串,从版本中的标记派生 控制系统。这有助于在夜间或每次提交时唯一标识 构建持续集成并发布软件的新版本 只需创建一个标记。

功能

用法

使用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作为替代方案:

    版本管理器需要一个Stupp.Py文件存在,否则^ {CD4}} 将失败,使其与基于非setuptools的项目不兼容 例如那些使用诗歌或电影的人。无论 项目的构建系统。
  • 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

    $ 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
    

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
tomcat Java条带错误   java OPENTSDB fsck修复程序不更正重复点   java JavaFX在控制器内切换自身的可见性   java maven surefire插件未并行执行运行程序   读取导致Freemarker模板引擎中TemplateException的Java对象   无法使Java库与我的Android应用程序一起工作   安卓 java。lang.IllegalStateException游标   使用Java检索XML文件中的XSL URL和名称   java如何从文本文件集合中提取特定值   电子邮件java mail gmail   java为什么finalize()只被垃圾收集器调用一次?   java方法findViewById(int)对于Json类型是未定义的。蛇形   java在安卓中尝试从brother打印机打印位图时遇到以下异常   java在颤振中支持Kotlin的优势   java从后面编写文本   java制作列表。第一个列表可以有相同的数字,第二个将是价格,尝试制作第三个列表,如果它们是相同的数字,它将添加价格