Expand description
A library for python version numbers and specifiers, implementing PEP 440.
use std::str::FromStr;
use pep440_rs::{VersionSpecifiers, Version, VersionSpecifier};
let version = Version::from_str("1.19").unwrap();
let version_specifier = VersionSpecifier::from_str("== 1.*").unwrap();
assert!(version_specifier.contains(&version));
let version_specifiers = VersionSpecifiers::from_str(">=1.16, <2.0").unwrap();
assert!(version_specifiers.contains(&version));
PEP 440 has a lot of unintuitive features, including:
- An epoch that you can prefix the version which, e.g.
1!1.2.3
. Lower epoch always means lower version (1.0 <=2!0.1
) - post versions, which can be attached to both stable releases and prereleases
- dev versions, which can be attached to sbpth table releases and prereleases. When attached to a prerelease the dev version is ordered just below the normal prerelease, however when attached to a stable version, the dev version is sorted before a prereleases
- prerelease handling is a mess: “Pre-releases of any kind, including developmental releases, are implicitly excluded from all version specifiers, unless they are already present on the system, explicitly requested by the user, or if the only available version that satisfies the version specifier is a pre-release.”. This means that we can’t say whether a specifier matches without also looking at the environment
- prelease vs. prerelease incl. dev is fuzzy
- local versions on top of all the others, which are added with a + and have implicitly typed string and number segments
- no semver-caret (
^
), but a pseudo-semver tilde (~=
) - ordering contradicts matching: We have e.g.
1.0+local > 1.0
when sorting, but==1.0
matches1.0+local
. While the ordering of versions itself is a total order the version matching needs to catch all sorts of special cases
Structs§
- An error that occurs when parsing an invalid version specifier operator.
- An optional pre-release modifier and number applied to a version.
- A version number such as
1.2.3
or4!5.6.7-a8.post9.dev0
. - An error that occurs when parsing a
Version
string fails. - A version number pattern.
- An error that occurs when parsing a
VersionPattern
string fails. - A version range such such as
>1.2.3
,<=4!5.6.7-a8.post9.dev0
or== 4.1.*
. Parse withVersionSpecifier::from_str
- A thin wrapper around
Vec<VersionSpecifier>
with a serde implementation - Error with span information (unicode width) inside the parsed line
Enums§
- A part of the local version identifier
- One of
~=
==
!=
<=
>=
<
>
===
- Optional prerelease modifier (alpha, beta or release candidate) appended to version
Statics§
- The minimum version that can be represented by a
Version
:0a0.dev0
.