实现“semver”方案的库。
semantic-version的Python项目详细描述
开始
使用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')
在这种情况下,major、minor和patch是必需的,并且必须是整数。 prerelease和patch如果提供,则必须是字符串的元组:
>>> 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模块为 存储Version或BaseSpec对象。
在django部分提供了更多文档。
贡献
为了贡献源代码:
- 在GitHub:https://github.com/rbarrois/python-semanticversion/issues上打开问题
- 叉repository 并在GitHub 上提交请求
- 或者给我一个补丁(mailto:raphael.barrois+semver@polytechnique.org)
提交修补程序或请求时,应遵守以下规则:
- 编码约定基于8
- 添加更改后,整个测试套件必须通过
- 新功能的测试覆盖率必须为100%
- 新功能和方法应记录在reference部分中 包含在changelog 中
- 在contributors部分包含您的姓名
注意
所有文件都应包含以下标题:
# -*- encoding: utf-8 -*- # Copyright (c) The python-semanticversion project
内容
maxdepth: 2 reference django changelog credits
索引和表格
- genindex
- modindex
- search