SemaVer

SemaVer is a simple library for Python that helps to work with versions using semantic versioning notation.

Version objects

To create a version object, instantiate the Version class and pass version identifier as a first constructor's argument:

from semaver import Version

v1_0_0 = Version('1.0.0')

Valid version identifiers can be found at semver.org. Please note that currently SemaVer does not support pre-release and build metadata specs.

All non-specified parts of the version identifier counts as zeroes, i. e. '1' == '1.0' == '1.0.0'.

Compare versions

You may compare versions using regular Python comparison operators:

from semaver import Version

v1_0 = Version('1.0')
v1_0_0 = Version('1.0.0')
v1_0_1 = Version('1.0.1')

assert v1_0 == v1_0_0  # True
assert v1_0 != v1_0_0  # False

assert v1_0 < v1_0_1  # True
assert v1_0 <= v1_0_1  # True
assert v1_0 > v1_0_1  # False
assert v1_0 >= v1_0_1  # False

# Or using plain strings

assert v1_0 == '1'  # True
assert v1_0 == '1.0'  # True
assert v1_0 == '1.0.0'  # True

Adding and subtracting versions

from semaver import Version

print(Version('1.0.0') + Version('0.1.1'))  # '1.1.1'
from semaver import Version

print(Version('2.0.1') - Version('1.0.1'))  # '1.0.0'

Version range objects

Instance of VersionRange represents a version range. First argument of the constructor is a version range identifier.

from semaver import VersionRange

VersionRange('1.x')

Following formats are supported.

For example, each item of the following list shows equal version range identifiers:

  • 1.x1.*^1>=1,<2.
  • ^1.1>=1.1,<2.
  • 1.0.x1.0.*~1~1.0.

Checking if a version is in a range

from semaver import Version, VersionRange

v1_2_3 = Version('1.2.3')
v1_x = VersionRange('1.x')
v2_x = VersionRange('2.x')

assert v1_2_3 in v1_x  # True
assert v1_2_3 in v2_x  # False

# Or using plain strings

assert '1.2.3' in v1_x  # True
assert '1.2.3' in v2_x  # False

Checking if a range is in a range

from semaver import VersionRange

v1_to_3 = VersionRange('>=1,<=3')
v2_x = VersionRange('2.x')

assert v2_x in v1_to_3  # True
assert v1_to_3 in v2_x  # False

# Or using plain strings

assert '2.x' in v1_to_3  # True
assert '>=1,<=3' in v2_x  # False