19 个不稳定版本 (3 个破坏性版本)
0.6.6 | 2024 年 7 月 30 日 |
---|---|
0.6.0 | 2024 年 4 月 9 日 |
0.5.0 | 2024 年 2 月 18 日 |
0.4.0 | 2023 年 12 月 11 日 |
0.3.2 | 2023 年 3 月 31 日 |
#124 in 解析器实现
87,572 每月下载量
用于 9 个软件包 (7 个直接使用)
190KB
4K SLoC
PEP440 在 rust 中
一个用于 Python 版本号和指定符的库,实现了 PEP 440。有关背景信息,请参阅 重实现 PEP 440。
在 pep508_rs 中提供了对要求语法的更高层绑定。
use std::str::FromStr;
use pep440_rs::{parse_version_specifiers, 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 = parse_version_specifiers(">=1.16, <2.0").unwrap();
assert!(version_specifiers.contains(&version));
在 python 中 (pip install pep440_rs
)
from pep440_rs import Version, VersionSpecifier
assert Version("1.1a1").any_prerelease()
assert Version("1.1.dev2").any_prerelease()
assert not Version("1.1").any_prerelease()
assert VersionSpecifier(">=1.0").contains(Version("1.1a1"))
assert not VersionSpecifier(">=1.1").contains(Version("1.1a1"))
# Note that python comparisons are the version ordering, not the version specifiers operators
assert Version("1.1") >= Version("1.1a1")
assert Version("2.0") in VersionSpecifier("==2")
PEP 440 有很多不直观的特性,包括
- 一个纪元,可以加在版本号前,例如
1!1.2.3
。较低的纪元总是意味着较低的版本 (1.0 <=2!0.1
) - 后版本,可以附加到稳定发布版和预发布版上
- 开发版本,可以附加到 sbpth 表发布版和预发布版上。当附加到预发布版时,开发版本排在正常预发布版之下,然而当附加到稳定版本时,开发版本排在预发布版之前
- 预发布处理很混乱:“所有类型的预发布,包括开发发布,默认情况下都不包括在任何版本指定符中,除非它们已经在系统中存在,或用户明确请求,或者唯一满足版本指定符的版本是预发布版本。”这意味着我们不能说指定符是否匹配,而不同时查看环境
- 预发布与预发布 incl. 开发版本模糊不清
- 在所有其他版本之上的是本地版本,它们带有加号,并具有隐式类型的字符串和数字段
- 没有 semver-caret (
^
),而是一个伪 semver 波浪号 (~=
) - 排序与匹配冲突:例如,在排序时我们有
1.0+local > 1.0
,但==1.0
匹配1.0+local
。虽然版本的排序本身是一个全序,但版本匹配需要处理各种特殊情况
依赖关系
~0.4–1.6MB
~25K SLoC