pypi 依赖中的 'extra' 是什么?

What is 'extra' in pypi dependency?

在来自 pypi 的包的 json 响应的 requires_dist 部分,给出:

requires_dist : [
    "bcrypt; extra == 'bcrypt'",
    "argon2-cffi (>=16.1.0); extra == 'argon2'"
]

谁能说清楚每个依赖的第二个语句,extra == 'bcrypt'extra == 'argon2'

Extras 是您可以安装 除了 常规依赖项之外的依赖项,如果您明确要求它们。将它们视为可选功能。

您可以使用 == 之后的名称安装这些软件包名称。例如,如果您安装 somepackage 并想添加 bcrypt 可选功能,请使用:

pip install somepackage[bcrypt]

pip install somepackage[argon2]

或者,要包括两个可选的附加项,请用逗号分隔名称:

pip install somepackage[bcrypt,argon2]

虽然多次使用 somepackage[...] 也可以,因为 pip 足够聪明,知道主包已经安装。

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

参见 Installing Setuptools "Extras" in the Installing Packages section of the Python Packaging User Guide

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