Python诗歌-如何安装可选依赖项?

时间:2020-04-01 13:03:06

标签: python python-poetry

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.

2 个答案:

答案 0 :(得分:9)

如文档this section中所述,如果要在安装过程中使用tool.poetry.extras标志,则需要向pyproject.toml中添加一个-E组:

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

键指的是与poetry install -E一起使用的单词,该值是添加时标记为--optional的软件包的列表。当前有no support用于在添加可选软件包时使其成为特定组的一部分,因此您必须手工进行维护。

此附加抽象层背后的原因是,附加安装通常是指通过安装一个或多个依赖项而启用的某些附加功能。 poetry只是在这里模仿setuptools' definition of extra-installs,这也许可以解释为什么它如此稀疏地记录在案。

答案 1 :(得分:5)

我要补充的是,不仅您必须手动添加这个 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"]