{ "info": { "author": "Dmitry Marakasov", "author_email": "amdmi3@amdmi3.ru", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: C", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3 :: Only", "Topic :: Software Development :: Version Control", "Topic :: System :: Archiving :: Packaging", "Topic :: System :: Software Distribution" ], "description": "# Python bindings for libversion\n\n\n\t\"py-libversion\n\n\n[![Build Status](https://travis-ci.org/repology/py-libversion.svg?branch=master)](https://travis-ci.org/repology/py-libversion)\n[![PyPI downloads](https://img.shields.io/pypi/dm/libversion.svg)](https://pypi.org/project/libversion/)\n[![PyPI version](https://img.shields.io/pypi/v/libversion.svg)](https://pypi.org/project/libversion/)\n[![PyPI pythons](https://img.shields.io/pypi/pyversions/libversion.svg)](https://pypi.org/project/libversion/)\n[![Github commits (since latest release)](https://img.shields.io/github/commits-since/repology/py-libversion/latest.svg)](https://github.com/repology/py-libversion)\n\n## Purpose\n\nPython bindings for libversion, which provides **fast**, **powerful**\nand **correct** generic version string comparison algorithm.\n\nSee [libversion](https://github.com/repology/libversion) repository for\nmore details on the algorithm.\n\n## Performance\n\n**libversion** is 10x to 100x faster than other version comparison\nfacilities widely used in Python world.\n\n| Facility | comps/sec |\n|-------------------------------------|----------:|\n| **libversion.version_compare2** | 3492.81K |\n| **libversion.version_compare** | 3219.02K |\n| **libversion.Version** | 374.08K |\n| tuple(map(int, (v.split('.')))) | 206.02K |\n| cmp_version.cmp_version | 189.15K |\n| cmp_version.VersionString | 156.42K |\n| distutils.version.StrictVersion | 75.00K |\n| version.Version | 71.39K |\n| distutils.version.LooseVersion | 51.38K |\n| pkg_resources.parse_version | 22.26K |\n\n## Correctness\n\n**libversion** handles certain complex version cases better than other\nversion comparison facilities. Here are some example cases where others\nfail:\n\n| Test case | libversion | tuple | StrictVersion | LooseVersion | parse_version | cmp_version |\n|-------------------------|------------|---------------|---------------|---------------|---------------|---------------|\n| 1.0 == 1.0.0 | ok | incorrect (<) | ok | incorrect (<) | ok | ok |\n| 1.2_3 == 1.2-3 | ok | fail | fail | incorrect (>) | incorrect (<) | ok |\n| 1.2.3 == 1.2-3 | ok | fail | fail | fail | incorrect (>) | incorrect (<) |\n| 1.0alpha1 == 1.0.alpha1 | ok | fail | fail | ok | ok | incorrect (>) |\n| 1.0rc1 < 1.0 | ok | fail | fail | incorrect (>) | ok | incorrect (>) |\n| 1.0 < 1.0patch1 | ok | fail | fail | ok | incorrect (>) | ok |\n| 1.0.2a < 1.0.2g | ok | fail | fail | ok | incorrect (>) | ok |\n\nNote 1: **fail** means that attempt to compare versions has thrown\nan exception, usually bacause a library cannot parse specific version\nstring.\n\nNote 2: **version** module was not able to complete any tests as it's\na strict semantic version implementation which require 3 version\ncomponents. Also, it does not support Python 3 without modification.\n\n## Python wrapper features\n\n- Provides API similar to C library, `version_compare(a, b)` function\n- Provides more pythonic (but slower) `Version` class with overloaded\n comparison operators\n\n## Requirements\n\n- Python 3.6+\n- pkg-config\n- [libversion](https://github.com/repology/libversion) 2.7.0+\n\n## Example code\n\n```python\nfrom libversion import Version, version_compare\n\nassert(version_compare(\"0.9\", \"1.1\") < 0)\nassert(version_compare(\"1.0\", \"1.0.0\") == 0)\nassert(version_compare(\"1.1\", \"0.9\") > 0)\n\nassert(Version(\"0.9\") < Version(\"1.1\"))\nassert(Version(\"1.0\") == Version(\"1.0.0\"))\nassert(Version(\"1.1\") > Version(\"0.9\"))\n\nassert(Version(\"0.999\") < Version(\"1.0alpha1\"))\nassert(Version(\"1.0alpha1\") < Version(\"1.0alpha2\"))\nassert(Version(\"1.0alpha2\") < Version(\"1.0beta1\"))\nassert(Version(\"1.0beta1\") < Version(\"1.0pre1\"))\nassert(Version(\"1.0pre1\") < Version(\"1.0rc1\"))\nassert(Version(\"1.0rc1\") < Version(\"1.0\"))\nassert(Version(\"1.0\") < Version(\"1.0patch1\"))\n```\n\n## License\n\nMIT license, copyright (c) 2017-2018 Dmitry Marakasov amdmi3@amdmi3.ru.", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/repology/py-libversion", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "libversion", "package_url": "https://pypi.org/project/libversion/", "platform": "", "project_url": "https://pypi.org/project/libversion/", "project_urls": { "Homepage": "https://github.com/repology/py-libversion" }, "release_url": "https://pypi.org/project/libversion/1.2.0/", "requires_dist": null, "requires_python": "", "summary": "Python bindings for libversion", "version": "1.2.0" }, "last_serial": 5816517, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "e66e5ffdf21e041f3e8a6dfb2570fba5", "sha256": "b8d48bf1a610ef43f1a72eb507c3e438a48d0d17dc77db1020d3223424c72069" }, "downloads": -1, "filename": "libversion-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e66e5ffdf21e041f3e8a6dfb2570fba5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4317, "upload_time": "2018-02-07T21:47:15", "url": "https://files.pythonhosted.org/packages/5a/08/6a504b5c9bb45221c857b193907edca2ddd2eabdabe0d7d570a97ec05278/libversion-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "9161ad8d0b84a883a4c9cfefaff9487b", "sha256": "4033f284afab5bf7468bc1fb309e0b80a8ecaacbb0fe8f6986a95340b8e53d43" }, "downloads": -1, "filename": "libversion-0.1.1.tar.gz", "has_sig": false, "md5_digest": "9161ad8d0b84a883a4c9cfefaff9487b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4644, "upload_time": "2018-02-08T13:25:29", "url": "https://files.pythonhosted.org/packages/4d/7c/5934cd857b041b488f3f541e9aba6a493304317ed764ef714209dc897279/libversion-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "95c192d4ae40e6eab77c606ae7ef6342", "sha256": "ad39c3344a63f28643bc971288ce1c31bf67458793cff79e744c553c808ea70d" }, "downloads": -1, "filename": "libversion-0.2.0.tar.gz", "has_sig": false, "md5_digest": "95c192d4ae40e6eab77c606ae7ef6342", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6331, "upload_time": "2018-02-08T17:12:55", "url": "https://files.pythonhosted.org/packages/c9/a8/ed3d7d48a8582e29e4cd34b80f508eb33bbd61988bad3e3b33ec404f0f20/libversion-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "b8982898b6396c9ecc8d721f1e311e4e", "sha256": "e57852422e7c7410c7f57b1962e39f5d1e94ad7fd97e41139ac349d19e6aefe6" }, "downloads": -1, "filename": "libversion-0.2.1.tar.gz", "has_sig": false, "md5_digest": "b8982898b6396c9ecc8d721f1e311e4e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7900, "upload_time": "2018-02-08T19:44:30", "url": "https://files.pythonhosted.org/packages/83/47/aaeb021ff948f1728c730a0fd21e6b604443160c12ee3e847f6a6c841d9b/libversion-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "880d0062976b4ec6ec23e92c90eae954", "sha256": "5778451506cc39f061ebcce5a6569dbffcdebb10b73da2dd741fc376a4e79aa6" }, "downloads": -1, "filename": "libversion-0.2.2.tar.gz", "has_sig": false, "md5_digest": "880d0062976b4ec6ec23e92c90eae954", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7822, "upload_time": "2018-02-08T19:48:20", "url": "https://files.pythonhosted.org/packages/52/c8/1b906000833e356ba72a804a4bf0d8e7ae3962d9212c5b3ef0e1e5092f30/libversion-0.2.2.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "fdd266dcf1051fe2bba6dd784f7544e9", "sha256": "ba6dc8320a66519073ba6297451879429dda228093a18ff4f2141572d6b110a2" }, "downloads": -1, "filename": "libversion-1.0.0.tar.gz", "has_sig": false, "md5_digest": "fdd266dcf1051fe2bba6dd784f7544e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7197, "upload_time": "2018-04-02T17:37:01", "url": "https://files.pythonhosted.org/packages/5a/d1/b9411c7b375ec567f449401684de1535c229ac8e8806a71b7d9da2039fd1/libversion-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "35027f7f521686ef45bfb3715f33413a", "sha256": "2b4b181b1c93a8e92e0869743d975717bfd8c35a7de689628ea2a1c9e2ea00c8" }, "downloads": -1, "filename": "libversion-1.1.0.tar.gz", "has_sig": false, "md5_digest": "35027f7f521686ef45bfb3715f33413a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6880, "upload_time": "2018-10-29T19:38:09", "url": "https://files.pythonhosted.org/packages/6e/c3/27e0cab1b48af424c01c2a8ee66f35ef2680cc0706f54506591240d33ce7/libversion-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "d258297607a15cbc7a4675d7c6d5bd0c", "sha256": "654a954cdaa947cf68e147c4bd106d371ec06fb209111c779cc647f96c50139f" }, "downloads": -1, "filename": "libversion-1.1.1.tar.gz", "has_sig": false, "md5_digest": "d258297607a15cbc7a4675d7c6d5bd0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8827, "upload_time": "2018-10-29T20:17:13", "url": "https://files.pythonhosted.org/packages/f5/57/3906dd1631ef7be43c1b82b14ed62e95abf2c66f66bef541cebb025e156c/libversion-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "35ffebcaa457952c8356f6a2939e4960", "sha256": "2c95ea0c0c584609b8422833b5f196b4325afdbcba8a3e3edf24cb5eae6c0a10" }, "downloads": -1, "filename": "libversion-1.1.2.tar.gz", "has_sig": false, "md5_digest": "35ffebcaa457952c8356f6a2939e4960", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7460, "upload_time": "2018-10-29T20:20:04", "url": "https://files.pythonhosted.org/packages/6b/cc/e65169149d1920fc61476fb9658a3c7fa5f425743f11ebd9b80b13c2a87b/libversion-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "00bab25d877e29cf9f1d172dcccd7b49", "sha256": "d69505eb1c473e5602b354f1cbee1895151da41f48f93c05be42af0c0b5ea1ab" }, "downloads": -1, "filename": "libversion-1.1.3.tar.gz", "has_sig": false, "md5_digest": "00bab25d877e29cf9f1d172dcccd7b49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7646, "upload_time": "2019-03-04T18:50:36", "url": "https://files.pythonhosted.org/packages/77/c2/a152150babdea54c0a9d078c22867ab1d0001d74bcd16f28efca0e555f6f/libversion-1.1.3.tar.gz" } ], "1.1.4": [ { "comment_text": "", "digests": { "md5": "79f9be32bd1baba085f47c12b4dad315", "sha256": "982019a547a922b96cde904f17dad1e0dc00dd1c30068523d06794a0c9e6e076" }, "downloads": -1, "filename": "libversion-1.1.4.tar.gz", "has_sig": false, "md5_digest": "79f9be32bd1baba085f47c12b4dad315", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7909, "upload_time": "2019-06-25T21:10:06", "url": "https://files.pythonhosted.org/packages/73/19/f55df2e9961f95e0fdf28c0eb8e0ab54c7520e2541d11c0cfa352a2fa32e/libversion-1.1.4.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "dc9cff32f873c94677f715acd4ebc67c", "sha256": "b352cc98ca4e23095b362e3dee57a75f193b5380060988d4823b84a7a9b47adc" }, "downloads": -1, "filename": "libversion-1.2.0.tar.gz", "has_sig": false, "md5_digest": "dc9cff32f873c94677f715acd4ebc67c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8197, "upload_time": "2019-09-11T19:26:41", "url": "https://files.pythonhosted.org/packages/d9/10/cbe2590cc2f8a16c2b9f20ec3b2a854e4c587a11a7188d2259f038c9bd22/libversion-1.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "dc9cff32f873c94677f715acd4ebc67c", "sha256": "b352cc98ca4e23095b362e3dee57a75f193b5380060988d4823b84a7a9b47adc" }, "downloads": -1, "filename": "libversion-1.2.0.tar.gz", "has_sig": false, "md5_digest": "dc9cff32f873c94677f715acd4ebc67c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8197, "upload_time": "2019-09-11T19:26:41", "url": "https://files.pythonhosted.org/packages/d9/10/cbe2590cc2f8a16c2b9f20ec3b2a854e4c587a11a7188d2259f038c9bd22/libversion-1.2.0.tar.gz" } ] }