【问题标题】: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'

【问题讨论】:

    标签: python pip pypi python-packaging


    【解决方案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],反之亦然?
    猜你喜欢
    • 2015-05-09
    • 2020-10-16
    • 2018-07-04
    • 2022-01-06
    • 2018-04-10
    • 2020-03-08
    • 1970-01-01
    • 2016-06-24
    • 2017-10-25
    相关资源
    最近更新 更多