pypi依赖中的“额外”是啥?

Posted

技术标签:

【中文标题】pypi依赖中的“额外”是啥?【英文标题】:What is 'extra' in pypi dependency?pypi依赖中的“额外”是什么? 【发布时间】:2019-02-27 16:55:56 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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 添加到要处理的内容列表中安装。

请参阅Python Packaging User Guide安装包部分中的Installing Setuptools "Extras"

是否安装了可选附加功能的所有依赖项取决于已安装的软件包本身。一个常见的模式是使用try...except ImportError: 守卫来测试这些额外的依赖是否可用。

【讨论】:

你能举一个这个依赖的例子吗? "argon2-cffi (>=16.1.0); extra == 'argon2'" 我在安装 celery 时遇到过类似 somepackage[bcrypt] 的问题,但与问题中的类型依赖关系无关。 @Marty: somepackage[argon2] 将安装带有可选附加功能的软件包。 来到"argon2-cffi (>=16.1.0); extra == 'argon2'" 时,somepackage 到底是什么?是argon2-cffi[argon2]>=16.1.0吗? @Marty:不,这是您在其中找到此规范的包的名称。 所以如果包是django,它有什么关系? Django[argon2]?所以这个argon2-cffi (>=16.1.0) 在声明中优先于Django[argon2],反之亦然?

以上是关于pypi依赖中的“额外”是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Parse.com 服务中的(额外请求)是啥意思?

Collada 中的节点额外技术是啥?

pypy apt 损坏 - 循环依赖?

AcquireTokenAsync 允许的额外查询参数是啥

迁移文件中所有额外的垃圾是啥?

保留/自动释放已保留财产的额外好处是啥?