Purpose
Provides fast and correct generic version string comparison algorithm.
See libversion repository for more details on the algorithm.
Performance
libversion is 10x to 100x faster than other version comparison facilities widely used in Python world.
Facility |
comps/sec |
|---|---|
libversion.version_compare |
3219.02K |
libversion.Version |
227.56K |
tuple(map(int, (v.split(‘.’)))) |
206.02K |
cmp_version.cmp_version |
189.15K |
cmp_version.VersionString |
156.42K |
distutils.version.StrictVersion |
75.00K |
version.Version |
71.39K |
distutils.version.LooseVersion |
51.38K |
pkg_resources.parse_version |
22.26K |
Correctness
libversion handles certain complex version cases better than other version comparison facilities. Here are some example cases where others fail:
Test case |
libversion |
tuple |
StrictVersion |
LooseVersion |
parse_version |
cmp_version |
|---|---|---|---|---|---|---|
1.0 = 1.0.0 |
ok |
incorrect (<) |
ok |
incorrect (<) |
ok |
ok |
1.2_3 = 1.2-3 |
ok |
fail |
fail |
incorrect (>) |
incorrect (<) |
ok |
1.2.3 = 1.2-3 |
ok |
fail |
fail |
fail |
incorrect (>) |
incorrect (<) |
1.0alpha1 = 1.0.alpha1 |
ok |
fail |
fail |
ok |
ok |
incorrect (>) |
1.0rc1 < 1.0 |
ok |
fail |
fail |
incorrect (>) |
ok |
incorrect (>) |
1.0 < 1.0patch1 |
ok |
fail |
fail |
ok |
incorrect (>) |
ok |
1.0.2a < 1.0.2g |
ok |
fail |
fail |
ok |
incorrect (>) |
ok |
Note: version module was not able to complete any tests as it’s a strict semantic version implementation which require 3 version components. Also, it does not support Python 3 without modification.
Python wrapper features
Provides API similar to C library, version_compare(a, b) function
Provides more pythonic (but slower) Version class with overloaded comparison operators
Requirements
Python 3.4+
pkg-config
libversion 2.5.0+
Example code
from libversion import Version, version_compare
assert(version_compare("0.9", "1.1") < 0)
assert(version_compare("1.0", "1.0.0") == 0)
assert(version_compare("1.1", "0.9") > 0)
assert(Version("0.9") < Version("1.1"))
assert(Version("1.0") == Version("1.0.0"))
assert(Version("1.1") > Version("0.9"))
assert(Version("0.999") < Version("1.0alpha1"))
assert(Version("1.0alpha1") < Version("1.0alpha2"))
assert(Version("1.0alpha2") < Version("1.0beta1"))
assert(Version("1.0beta1") < Version("1.0pre1"))
assert(Version("1.0pre1") < Version("1.0rc1"))
assert(Version("1.0rc1") < Version("1.0"))
assert(Version("1.0") < Version("1.0patch1"))
License
MIT license, copyright (c) 2017-2018 Dmitry Marakasov amdmi3@amdmi3.ru.
Metadata
Release files for libversion 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| libversion-0.2.2.tar.gz | 7.8 kB | Details |
Release files / libversion-0.2.2.tar.gz
| Download URL | libversion-0.2.2.tar.gz |
|---|---|
| Size | 7.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5778451506cc39f061ebcce5a6569dbffcdebb10b73da2dd741fc376a4e79aa6
|
|
BLAKE2b-256 checksum How to use checksums |
52c81b906000833e356ba72a804a4bf0d8e7ae3962d9212c5b3ef0e1e5092f30
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |