实现“semver”方案的库。

semantic-version的Python项目详细描述


python语义版本

这个小的python库提供了一些工具来处理python中的SemVer。 它严格遵循semver方案的2.0.0版本。

https://secure.travis-ci.org/rbarrois/python-semanticversion.png?branch=masterLatest VersionSupported Python versionsWheel statusLicense

开始

使用pip:

pip install semantic_version

或来自github:

$ git clone git://github.com/rbarrois/python-semanticversion.git

导入代码:

importsemantic_version

本模块提供处理语义版本的类:

  • Version表示版本号(0.1.1-alpha+build.2012-05-15
  • BaseSpec-派生类表示需求规范(>=0.1.1,<0.3.0):
    • SimpleSpec描述自然描述语法
    • NpmSpec用于npm样式范围描述。

版本

定义Version非常简单:

>>> importsemantic_version>>> v=semantic_version.Version('0.1.1')>>> v.major0
>>> v.minor1
>>> v.patch1
>>> v.prerelease[]
>>> v.build[]
>>> list(v)[0, 1, 1, [], []]

如果提供的版本字符串无效,将引发ValueError

>>> semantic_version.Version('0.1')Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/rbarrois/dev/semantic_version/src/semantic_version/base.py", line 64, in __init__major,minor,patch,prerelease,build=self.parse(version_string,partial)
  File "/Users/rbarrois/dev/semantic_version/src/semantic_version/base.py", line 86, in parseraiseValueError('Invalid version string: %r'%version_string)ValueError: Invalid version string: '0.1'

显然,Versions可以比较:

>>> semantic_version.Version('0.1.1')<semantic_version.Version('0.1.2')True
>>> semantic_version.Version('0.1.1')>semantic_version.Version('0.1.1-alpha')True
>>> semantic_version.Version('0.1.1')<=semantic_version.Version('0.1.1-alpha')False

您还可以获得一个新版本,该版本表示某个版本级别中的凹凸:

>>> v=semantic_version.Version('0.1.1+build')>>> new_v=v.next_major()>>> str(new_v)'1.0.0'
>>> v=semantic_version.Version('1.1.1+build')>>> new_v=v.next_minor()>>> str(new_v)'1.2.0'
>>> v=semantic_version.Version('1.1.1+build')>>> new_v=v.next_patch()>>> str(new_v)'1.1.2'

还可以检查给定字符串是否是正确的语义版本字符串:

>>> semantic_version.validate('0.1.3')True
>>> semantic_version.validate('0a2')False

最后,可以使用命名组件创建Version,而不是:

>>> semantic_version.Version(major=0,minor=1,patch=2)Version('0.1.2')

在这种情况下,majorminorpatch是必需的,并且必须是整数。 prereleasepatch如果提供,则必须是字符串的元组:

>>> semantic_version.Version(major=0,minor=1,patch=2,prerelease=('alpha','2'))Version('0.1.2-alpha.2')

需求规格

SimpleSpec对象描述了一系列可接受的版本:

>>> s=SimpleSpec('>=0.1.1')# At least 0.1.1>>> s.match(Version('0.1.1'))True
>>> s.match(Version('0.1.1-alpha1'))# pre-release satisfy version specTrue
>>> s.match(Version('0.1.0'))False

还可以使用in关键字使用更简单的测试语法:

>>> s=SimpleSpec('==0.1.1')>>> Version('0.1.1-alpha1')insTrue
>>> Version('0.1.2')insFalse

组合规范可以表示如下:

>>> SimpleSpec('>=0.1.1,<0.3.0')

使用规范

SimpleSpec.filter方法过滤Version

>>> s=SimpleSpec('>=0.1.0,<0.4.0')>>> versions=(Version('0.%d.0'%i)foriinrange(6))>>> forvins.filter(versions):... printv0.1.0
0.2.0
0.3.0

也可以从这些站点中选择“最佳”版本:

>>> s=SimpleSpec('>=0.1.0,<0.4.0')>>> versions=(Version('0.%d.0'%i)foriinrange(6))>>> s.select(versions)Version('0.3.0')

强制任意版本字符串

某些用户提供的输入可能与语义版本方案不匹配。 对于这种情况,Version.coerce方法将尝试转换任何 将字符串转换为有效的semver版本:

>>> Version.coerce('0')Version('0.0.0')
>>> Version.coerce('0.1.2.3.4')Version('0.1.2+3.4')
>>> Version.coerce('0.1.2a3')Version('0.1.2-a3')

在规范中包括预发布标识符

在对SimpleSpec测试Version时,比较如下 根据普通用户的期望进行调整;因此,预发布版本(1.0.0-alpha) 将不满足==1.0.0SimpleSpec

只有包含在^{tt3}中时,才会比较预发布标识符$ 定义或(对于空的预发行版本号),如果附加了一个短划线 (1.0.0-):

>>> Version('0.1.0-alpha')inSimpleSpec('<0.1.0')# No pre-release identifierFalse
>>> Version('0.1.0-alpha')inSimpleSpec('<0.1.0-')# Include pre-release in checksTrue

在规范中包括构建元数据

构建元数据没有顺序;因此,唯一有意义的比较包括 生成元数据是相等的。

>>> Version('1.0.0+build2')inSimpleSpec('<=1.0.0')# Build metadata ignoredTrue
>>> Version('1.0.0+build1')inSimpleSpec('==1.0.0+build2')# Include build in checksFalse

基于npm的范围

NpmSpec类处理npm样式范围:

>>> Version('1.2.3')inNpmSpec('1.2.2 - 1.4')True
>>> Version('1.2.3')inNpmSpec('<1.x || >=1.2.3')True

有关npm的详细说明,请参阅https://docs.npmjs.com/misc/semver.html。 范围语法。

与django一起使用

semantic_version.django_fields模块为 存储VersionBaseSpec对象。

django部分提供了更多文档。

贡献

为了贡献源代码:

提交修补程序或请求时,应遵守以下规则:

  • 编码约定基于8
  • 添加更改后,整个测试套件必须通过
  • 新功能的测试覆盖率必须为100%
  • 新功能和方法应记录在reference部分中 包含在changelog
  • contributors部分包含您的姓名

注意

所有文件都应包含以下标题:

# -*- encoding: utf-8 -*-
# Copyright (c) The python-semanticversion project

内容

maxdepth:2

reference django changelog credits

索引和表格

  • genindex
  • modindex
  • search

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

推荐PyPI第三方库


热门话题
java Intellij通过方法中的包查找用法   java中VS代码和打包命名的问题   将java CMS功能集成到具有高度动态内容的网站(Lucene/Mysql/Nosql)的策略   oracle的java类强制转换异常。jdbc。驾驶员OracleConnection   字节码向JVM添加上指令   如何在抽象类中执行java方法?   java是否可以在apache访问日志中排除指定的GET参数?(作者:W7开发环境)   java如何获取已安装音频播放器的列表?   尝试向HS学生展示如何使用Java访问MS数据库   使用正则表达式java对给定行中的特定字符串进行计数   java JOOQ Select查询中的Select计数   方法Java,如何从二维双精度数组中找到特定值?   获取图像URL的java正则表达式   java在切换到新的窗口驱动程序后找不到元素