Skip to main content

Python bindings for libversion

py-libversion packaging status

Build Status PyPI downloads PyPI version PyPI pythons Github commits (since latest release)

Purpose

Python bindings for libversion, which provides fast, powerful 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_compare2 3492.81K
libversion.version_compare 3219.02K
libversion.Version 374.08K
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 1: fail means that attempt to compare versions has thrown an exception, usually bacause a library cannot parse specific version string.

Note 2: 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

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 1.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for libversion 1.2.0
File Size Uploaded
libversion-1.2.0.tar.gz 8.2 kB Details

Release files / libversion-1.2.0.tar.gz

Download URL libversion-1.2.0.tar.gz
Size 8.2 kB
Tags Source
SHA-256 checksum
How to use checksums
b352cc98ca4e23095b362e3dee57a75f193b5380060988d4823b84a7a9b47adc
BLAKE2b-256 checksum
How to use checksums
d910cbe2590cc2f8a16c2b9f20ec3b2a854e4c587a11a7188d2259f038c9bd22
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.2.0 requests-toolbelt/0.8.0 tqdm/4.35.0 CPython/3.7.4

Release history Release notifications | RSS feed

1.2.4

1 release file

1.2.3

1 release file

1.2.2

1 release file

1.2.1

1 release file

This release

1.2.0 This release

1 release file

1.1.4

1 release file

1.1.3

1 release file

1.1.2

1 release file

1.1.1

1 release file

1.1.0

1 release file

1.0.0

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.1.1

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page