构建可选依赖项的检查
项目描述
optional_dependencies
构建可选依赖项的检查
安装
pip install optional_dependencies
文档
高级API
此包允许轻松构建可选依赖项的检查。由于每个Python项目都可能有其自己独特的可选依赖项集合,optional_dependencies
提供了enum.Enum
基类OptionalDependencyEnum
以枚举可选依赖项。
一个构造的 OptionalDependencyEnum
enum.Enum
包含成员,这些成员是包名,其值可以是 packaging.Version
或 NOT_INSTALLED
标志值。
例如
# Note that `auto` is a convenience re-export of enum.auto
from optional_dependencies import OptionalDependencyEnum, auto
class OptDeps(OptionalDependencyEnum):
PACKAGING = auto()
THIS_IS_NOT_INSTALLED = auto()
OptDeps.PACKAGING
# <OptDeps.PACKAGING: <Version('...')>>
OptDeps.PACKAGING.installed
# True
OptDeps.PACKAGING.version
# <Version('...')>
OptDeps.THIS_IS_NOT_INSTALLED
# <OptDeps.THIS_IS_NOT_A_PACKAGE: <InstalledState.NOT_INSTALLED: False>>
在 OptionalDependencyEnum
上使用 enum.auto
将版本解析传递给 packaging.utils.canonicalize_name
,然后 importlib.metadata.version
,然后 packaging.version.parse
。如果找不到包,则认为是 InstalledState.NOT_INSTALLED
InstalledState.NOT_INSTALLED
是一个 enum.Enum
成员,其布尔值为 False
。这在布尔检查中可能很有用,因为 packaging.Version
总是有一个布尔值为 True
。
if not OptDeps.THIS_IS_NOT_INSTALLED:
print("NOT_INSTALLED has a truthy value of False")
# NOT_INSTALLED has a truthy value of False
if OptDeps.PACKAGING: # truthy value of `True`
print(OptDeps.PACKAGING)
# OptDeps.PACKAGING
低级 API
有时高级 API 不足以确定是否存在可选依赖项。例如,这可能会发生在编译包的情况下,其中包似乎已安装,但某些东西出了问题。在这些情况下,您可以使用低级 API 自定义枚举成员。
低级函数包括
-
optional_dependencies.utils.is_installed(pkg_name: str, /) -> bool
:是importlib.util.find_spec
的规范化形式。 -
optional_dependencies.utils.get_version(pkg_name: str, /) -> Version | Literal[InstalledState.NOT_INSTALLED]
:用于获取已安装包的packaging.Version
,或者在没有安装的情况下返回NOT_INSTALLED
。 -
optional_dependencies.utils.chain_checks(version: Version, /, *checks: bool)
:用于连接检查并确保返回值仍然是packaging.Version
或NOT_INSTALLED
。
以下是一个示例,说明具有 C 编译代码的包
from optional_dependencies.utils import is_installed, get_version, chain_checks
# A subpackage needs to be checked.
chain_checks(get_version("package1"), is_installed("package1.subpackage"))
# <Version('...')>
# This package is not installed correctly
chain_checks(get_version("package2"), is_installed("package2.subpackage"))
# <InstalledState.NOT_INSTALLED: False>
可以使用低级 API 与 OptionalDependencyEnum
一起使用
class OptDeps(OptionalDependencyEnum):
PACKAGING = auto()
THIS_IS_NOT_INSTALLED = chain_checks(
get_version("package2"), is_installed("package2.subpackage")
)
引用
如果您发现这个库很有用,并希望支持为科学社区开发低级代码库的开发和维护,请考虑引用这项工作。
开发
我们欢迎贡献!
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
optional_dependencies-0.3.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 653accf158865b6867004390334fa7e72c43f432b5f2c47c05927196c7611127 |
|
MD5 | 5b1614920812f5b0f1ee1bf3830e083b |
|
BLAKE2b-256 | 26ca3f17d662f69cb0cfb1f0503d45cde988dcf66a0cf01a58a6c8965378422a |
可选依赖项的哈希值-0.3.2-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e377389e9db9d54e42b04319ba71cdd256dde561ad8d4e89cbb5847d1f8bae3f |
|
MD5 | f6b2c70f8e3861a5a531914043e016f1 |
|
BLAKE2b-256 | a145582749493b8eddd0933b2d8de39b2f0cda20b3475a9d16b2447a804fd6b3 |