跳转到主要内容

一个用于Python依赖指定器的库,也称为PEP 508

项目描述

Rust中的依赖指定器(PEP 508)库

Crates.io PyPI

一个用于Python 依赖指定器的库,也称为 PEP 508

用法

在Rust中

use std::str::FromStr;
use pep508_rs::Requirement;

let marker = r#"requests [security,tests] >= 2.8.1, == 2.8.* ; python_version > "3.8""#;
let dependency_specification = Requirement::from_str(marker).unwrap();
assert_eq!(dependency_specification.name, "requests");
assert_eq!(dependency_specification.extras, Some(vec!["security".to_string(), "tests".to_string()]));

在Python中

from pep508_rs import Requirement

requests = Requirement(
    'requests [security,tests] >= 2.8.1, == 2.8.* ; python_version > "3.8"'
)
assert requests.name == "requests"
assert requests.extras == ["security", "tests"]
assert [str(i) for i in requests.version_or_url] == [">= 2.8.1", "== 2.8.*"]

Python绑定是用 maturin 构建的,但您也可以使用正常的 pip install .

VersionVersionSpecifierpep440_rs 重新导出,以避免类型不匹配。

标记

标记允许您仅在特定环境中(Python版本、操作系统、架构等)或特定功能激活时安装依赖项。例如,您可以说 importlib-metadata ; python_version < "3.8"itsdangerous (>=1.1.0) ; extra == 'security'。不幸的是,标记语法存在一些疏漏(例如,https://github.com/pypa/packaging.python.org/pull/1181),比较设计(PEP 440比较与字典序回退)导致了一些令人困惑的结果。此实现尝试仔细验证所有内容,并在出现不按预期语义进行的无效比较时发出警告。

在Python中,警告默认发送到正常的Python日志基础设施

from pep508_rs import Requirement, MarkerEnvironment

env = MarkerEnvironment.current()
assert not Requirement("numpy; extra == 'science'").evaluate_markers(env, [])
assert Requirement("numpy; extra == 'science'").evaluate_markers(env, ["science"])
assert not Requirement(
    "numpy; extra == 'science' and extra == 'arrays'"
).evaluate_markers(env, ["science"])
assert Requirement(
    "numpy; extra == 'science' or extra == 'arrays'"
).evaluate_markers(env, ["science"])
from pep508_rs import Requirement, MarkerEnvironment

env = MarkerEnvironment.current()
Requirement("numpy; python_version >= '3.9.'").evaluate_markers(env, [])
# This will log: 
# "Expected PEP 440 version to compare with python_version, found '3.9.', "
# "evaluating to false: Version `3.9.` doesn't match PEP 440 rules"

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。

源分发

pep508_rs-0.3.0.tar.gz (40.3 kB 查看哈希值)

上传时间: 源代码

构建版本

pep508_rs-0.3.0-cp38-abi3-win_amd64.whl (1.0 MB 查看哈希值)

上传时间: CPython 3.8+ Windows x86-64

pep508_rs-0.3.0-cp38-abi3-win32.whl (939.3 kB 查看哈希值)

上传时间: CPython 3.8+ Windows x86

pep508_rs-0.3.0-cp38-abi3-musllinux_1_2_x86_64.whl (1.3 MB 查看哈希值)

上传时间: CPython 3.8+ musllinux: musl 1.2+ x86-64

pep508_rs-0.3.0-cp38-abi3-musllinux_1_2_i686.whl (1.3 MB 查看哈希值)

上传时间: CPython 3.8+ musllinux: musl 1.2+ i686

pep508_rs-0.3.0-cp38-abi3-musllinux_1_2_armv7l.whl (1.5 MB 查看哈希值)

上传时间: CPython 3.8+ musllinux: musl 1.2+ ARMv7l

pep508_rs-0.3.0-cp38-abi3-musllinux_1_2_aarch64.whl (1.5 MB 查看哈希值)

上传时间: CPython 3.8+ musllinux: musl 1.2+ ARM64

pep508_rs-0.3.0-cp38-abi3-manylinux_2_34_x86_64.whl (1.2 MB 查看哈希值)

上传时间: CPython 3.8+ manylinux: glibc 2.34+ x86-64

pep508_rs-0.3.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB 查看哈希值)

上传时间: CPython 3.8+ manylinux: glibc 2.17+ x86-64

pep508_rs-0.3.0-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB 查看哈希值)

上传时间: CPython 3.8+ manylinux: glibc 2.17+ s390x

pep508_rs-0.3.0-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.4 MB 查看哈希值)

上传时间: CPython 3.8+ manylinux: glibc 2.17+ ppc64le

pep508_rs-0.3.0-cp38-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (1.4 MB 查看哈希值)

上传时间: CPython 3.8+ manylinux: glibc 2.17+ ppc64

pep508_rs-0.3.0-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.3 MB 查看哈希值)

上传时间: CPython 3.8+ manylinux: glibc 2.17+ ARMv7l

pep508_rs-0.3.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB 查看哈希值)

上传时间: CPython 3.8+ manylinux: glibc 2.17+ ARM64

pep508_rs-0.3.0-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl (1.3 MB 查看哈希值)

上传时间: CPython 3.8+ manylinux: glibc 2.5+ i686

pep508_rs-0.3.0-cp37-abi3-win_amd64.whl (1.0 MB 查看哈希值)

上传时间: CPython 3.7+ Windows x86-64

pep508_rs-0.3.0-cp37-abi3-musllinux_1_2_x86_64.whl (1.3 MB 查看哈希值)

上传时间: CPython 3.7+ musllinux: musl 1.2+ x86-64

pep508_rs-0.3.0-cp37-abi3-musllinux_1_2_i686.whl (1.3 MB 查看哈希值)

上传时间: CPython 3.7+ musllinux: musl 1.2+ i686

pep508_rs-0.3.0-cp37-abi3-musllinux_1_2_armv7l.whl (1.3 MB 查看哈希值)

上传时间: CPython 3.7+ musllinux: musl 1.2+ ARMv7l

pep508_rs-0.3.0-cp37-abi3-musllinux_1_2_aarch64.whl (1.2 MB 查看哈希值)

上传时间: CPython 3.7+ musllinux: musl 1.2+ ARM64

pep508_rs-0.3.0-cp37-abi3-manylinux_2_34_x86_64.whl (1.2 MB 查看哈希值)

上传时间: CPython 3.7+ manylinux: glibc 2.34+ x86-64

pep508_rs-0.3.0-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.3 MB 查看哈希值)

上传于 CPython 3.7+ manylinux: glibc 2.17+ s390x

pep508_rs-0.3.0-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.2 MB 查看哈希值)

上传于 CPython 3.7+ manylinux: glibc 2.17+ ppc64le

pep508_rs-0.3.0-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (1.3 MB 查看哈希值)

上传于 CPython 3.7+ manylinux: glibc 2.17+ ppc64

pep508_rs-0.3.0-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.0 MB 查看哈希值)

上传于 CPython 3.7+ manylinux: glibc 2.17+ ARMv7l

pep508_rs-0.3.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.1 MB 查看哈希值)

上传于 CPython 3.7+ manylinux: glibc 2.17+ ARM64

支持