20

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.
4

2 回答 2

29

如果您想在安装期间使用该标志,则需要向您的组添加一个tool.poetry.extras组,如文档的本节所述:pyproject.toml-E

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

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

这个额外的抽象层背后的原因是额外安装通常是指caching通过安装一个或多个依赖项(在这种情况下只是)启用的一些可选功能(在这种情况下redis)。poetry在这里简单地模仿setuptools了额外安装的定义,这可能解释了为什么它的文档如此少见。

于 2020-04-02T11:31:57.747 回答
15

我要补充一点,不仅你必须手动添加这个 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"]
于 2021-02-03T15:44:41.283 回答