【问题标题】:Python poetry - how to install optional dependencies?Python 诗歌 - 如何安装可选依赖项?
【发布时间】:2020-04-01 13:03:06
【问题描述】:

Python 的诗歌依赖管理器允许通过命令指定可选依赖:

$ poetry add --optional redis

这导致了这种配置:

[tool.poetry.dependencies]
python = "^3.8"
redis = {version="^3.4.1", optional=true}

但是,您如何实际安装它们?文档似乎暗示:

$ poetry install -E redis

但这只是抛出错误:

Installing dependencies from lock file

[ValueError]
Extra [redis] is not specified.

【问题讨论】:

  • 您的pyproject.toml 文件中是否还有一个[tool.poetry.extras] 部分来定义额外的组?因为这是 -E 标签所期望的,而不是原始包名称。
  • @Arne 谢谢,确实如此!这样一个 akward 规范:您需要在依赖项部分下使用 optional=true 指定包,在附加部分下使用 group=['package'] 指定包,呃。您可以添加您的评论作为答案吗?
  • 当然,我也会尝试解释为什么会这样,尽管那里的文档描述性不是很好。

标签: python python-poetry


【解决方案1】:

如果您想在安装过程中使用-E 标志,您需要将tool.poetry.extras 组添加到您的pyproject.toml,如文档的this section 中所述:

[tool.poetry.extras]
caching = ["redis"]

键是指与poetry install -E 一起使用的词,值是添加时标记为--optional 的包的列表。目前有no support 用于在添加可选包时将其作为特定组的一部分,因此您必须在pyproject.toml 文件中手动维护此部分。

这一额外抽象层背后的原因是额外安装通常是指通过安装一个或多个依赖项启用的一些可选功能(在本例中为 caching)(在本例中为 redis) . poetry 只是在此处模仿 setuptools' definition of extra-installs,这或许可以解释为什么它的文档记录如此之少。

【讨论】:

  • 对于遇到Extra is not specified 错误的任何人,您必须先运行poetry update
  • 是否有一个简短的变体,所以安装 all extras?
  • @StefanFalk 不,除非包维护者明确创建类似[all] 的东西。简单地列出所有可用的附加功能甚至不是那么容易:github.com/pypa/pip/issues/4824
【解决方案2】:

我要补充的是,不仅你必须手动添加这个 extras 部分,而且你的可选依赖项不能在 dev 部分中。

不起作用的代码示例:

[tool.poetry]
name = "yolo"
version = "1.0.0"
description = ""
authors = []

[tool.poetry.dependencies]
python = "2.7"
Django = "*"

[tool.poetry.dev-dependencies]
pytest = "*"
ipdb = {version = "*", optional = true}

[tool.poetry.extras]
dev_tools = ["ipdb"]

但这工作:

[tool.poetry]
name = "yolo"
version = "1.0.0"
description = ""
authors = []

[tool.poetry.dependencies]
python = "2.7"
Django = "*"
ipdb = {version = "*", optional = true}

[tool.poetry.dev-dependencies]
pytest = "*"

[tool.poetry.extras]
dev_tools = ["ipdb"]

【讨论】:

  • 谢谢!这是否记录在poetry 文档中?我找不到它,我正忙着想弄清楚为什么我的附加功能在我找到你的答案之前不会安装。
猜你喜欢
  • 2021-10-17
  • 1970-01-01
  • 2022-08-10
  • 2020-07-08
  • 2018-09-11
  • 1970-01-01
  • 2023-04-06
  • 2021-11-24
  • 1970-01-01
相关资源
最近更新 更多