首页 > 解决方案 > 如果请求包的特定附加功能,请安装依赖项的附加功能

问题描述

我的项目有 Celery 作为依赖项。这是一个硬依赖,即。我的项目离不开它。但是,它可以使用 Redis 作为其后端,而我的应用程序并不特别需要它。

我希望设置我的包,因此如果用户使用 安装依赖项poetry install -E redis,它将安装redisCelery 块(就像在 as 中指定pyproject.toml一样celery = { version="^4.4.0", extras=["redis"] })。

但是,如果用户使用普通的poetry install(不带-E redis),我不希望安装 Celery 的 Redis 依赖项(好像它只指定为celery = "^4.4.0")。

有没有办法把它放到诗歌配置中?或者我应该跟踪可选要求celery[redis]并手动将它们添加到我的pyproject.toml文件中?

我已经检查了关于这个问题的诗歌文档,但它没有提供一种方法来指定celery具有不同选项的相同依赖项(在我的情况下)。

标签: pythonpython-poetry

解决方案


这应该通过定义redis为可选的 extra来工作,例如:

[tool.poetry]
name = "mypackage"
version = "0.1.0"
description = ""
authors = ["finswimmer <finswimmer@example.org>"]

[tool.poetry.dependencies]
python = "^3.6"
celery = "^4.4.7"
redis = { version = "^3.5.3", optional = true }

[tool.poetry.dev-dependencies]

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

[build-system]
requires = ["poetry>=1.0"]
build-backend = "poetry.masonry.api"

推荐阅读