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_spec
s 添加到要处理的内容列表中安装。
请参阅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依赖中的“额外”是啥?的主要内容,如果未能解决你的问题,请参考以下文章