一个实现'SemVer'方案的库。
项目描述
简介
这个小巧的Python库提供了一些处理SemVer的工具。它严格遵循SemVer方案的2.0.0版本。
链接
ReadTheDocs上的文档:https://python-semanticversion.readthedocs.io/
GitHub上的源代码:http://github.com/rbarrois/python-semanticversion/
在GitHub Actions上构建:https://github.com/rbarrois/python-semanticversion/actions
语义版本规范:SemVer
入门
使用pip从PyPI安装此包
pip install semantic-version
或从GitHub安装
$ git clone git://github.com/rbarrois/python-semanticversion.git
在您的代码中导入它
import semantic_version
此模块提供了处理语义版本的类
Version表示版本号(0.1.1-alpha+build.2012-05-15)
BaseSpec派生类表示需求规范(>=0.1.1,<0.3.0)
SimpleSpec 描述了一种自然描述语法
NpmSpec 用于 NPM 风格的范围描述。
版本
定义一个 Version 非常简单
>>> import semantic_version
>>> v = semantic_version.Version('0.1.1')
>>> v.major
0
>>> v.minor
1
>>> v.patch
1
>>> 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 parse
raise ValueError('Invalid version string: %r' % version_string)
ValueError: Invalid version string: '0.1'
还可以使用命名组件创建一个 Version
>>> semantic_version.Version(major=0, minor=1, patch=2)
Version('0.1.2')
在这种情况下,major、minor 和 patch 是必需的,必须是整数。如果提供,prerelease 和 build 必须是字符串元组
>>> semantic_version.Version(major=0, minor=1, patch=2, prerelease=('alpha', '2'))
Version('0.1.2-alpha.2')
某些用户提供的输入可能与语义版本方案不匹配。对于此类情况,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')
处理版本
显然,可以比较版本
>>> 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'
需求规范
python-semanticversion 提供了几种方法来描述接受的版本范围
SimpleSpec 类提供了一种简单、易于理解的方案 - 从 PyPI 范围表示法中汲取了灵感;
NpmSpec 类支持整个 NPM 范围规范方案
>>> Version('0.1.2') in NpmSpec('0.1.0-alpha.2 .. 0.2.4') True >>> Version('0.1.2') in NpmSpec('>=0.1.1 <0.1.3 || 2.x') True >>> Version('2.3.4') in NpmSpec('>=0.1.1 <0.1.3 || 2.x') True
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 doesn't satisfy version spec
False
>>> s.match(Version('0.1.0'))
False
结合规范可以表示如下
>>> SimpleSpec('>=0.1.1,<0.3.0')
还可用 in 关键字提供更简单的测试语法
>>> s = SimpleSpec('==0.1.1')
>>> Version('0.1.1+git7ccc72') in s # build variants are equivalent to full versions
True
>>> Version('0.1.1-alpha1') in s # pre-release variants don't match the full version.
False
>>> Version('0.1.2') in s
False
有关 SimpleSpec 方案更详细的信息,请参阅完整文档:[https://python-semanticversion.readthedocs.io/en/latest/](https://python-semanticversion.readthedocs.io/en/latest/)
使用规范
SimpleSpec.filter 方法过滤 Version 的可迭代序列
>>> s = SimpleSpec('>=0.1.0,<0.4.0')
>>> versions = (Version('0.%d.0' % i) for i in range(6))
>>> for v in s.filter(versions):
... print v
0.1.0
0.2.0
0.3.0
也可以从这样的可迭代序列中选择“最佳”版本
>>> s = SimpleSpec('>=0.1.0,<0.4.0')
>>> versions = (Version('0.%d.0' % i) for i in range(6))
>>> s.select(versions)
Version('0.3.0')
贡献
为了对源代码做出贡献
在提交补丁或拉取请求时,应遵守以下规则
编码约定基于 PEP 8
添加更改后,整个测试套件必须通过
新功能必须达到 100% 的测试覆盖率
新功能和方法的文档应在 reference 部分中记录,并包含在 changelog 中
在 contributors 部分中包含您的姓名
项目详细信息
下载文件
下载您平台对应的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码发行版
构建发行版
semantic_version-2.10.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c |
|
MD5 | e48abef93ba69abcd4eaf4640edfc38b |
|
BLAKE2b-256 | 7d31f2289ce78b9b473d582568c234e104d2a342fd658cc288a7553d83bb8595 |
semantic_version-2.10.0-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177 |
|
MD5 | 5447b980c8f1463ccb8ac20f99d5eb46 |
|
BLAKE2b-256 | 6a238146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c |