pypi依赖项中的“额外”是什么?

Mar*_*rty 5 python pip pypi python-packaging

requires_distpypi的json响应中,给出:

requires_dist : [
    "bcrypt; extra == 'bcrypt'",
    "argon2-cffi (>=16.1.0); extra == 'argon2'"
]
Run Code Online (Sandbox Code Playgroud)

谁能说清楚每个相关的第二份声明,extra == 'bcrypt'extra == 'argon2'

Mar*_*ers 5

如果您明确要求常规功能,则除了常规依赖关系外,还可以安装其他依赖项。将它们视为可选功能。

您可以使用包名称后面的名称来安装它们==。例如,如果您要安装somepackage并想要添加bcrypt可选功能,请使用:

pip install somepackage[bcrypt]
Run Code Online (Sandbox Code Playgroud)

要么

pip install somepackage[argon2]
Run Code Online (Sandbox Code Playgroud)

或者,要同时包含两个可选的附加功能,请用逗号分隔名称:

pip install somepackage[bcrypt,argon2]
Run Code Online (Sandbox Code Playgroud)

尽管somepackage[...]多次使用也pip很聪明,足以知道已经安装了主软件包。

pip(或其他任何软件包安装工具)将列出的名称映射<packagename>[<extras_name>(,...)]requires_dict使用该<dependency_spec>; extra == '<extras_name>'格式的条目中,然后将dependency_specs 添加到要安装的东西列表中。

请参阅Python打包用户指南的“ 安装软件包”部分中的“安装Setuptools“其他”

由安装的软件包本身来检测是否安装了可选附加功能的所有依赖项。一种常见的模式是使用try...except ImportError:防护来测试可用的此类额外依赖项。