python - 如果请求包的特定附加功能,请安装依赖项的附加功能
问题描述
我的项目有 Celery 作为依赖项。这是一个硬依赖,即。我的项目离不开它。但是,它可以使用 Redis 作为其后端,而我的应用程序并不特别需要它。
我希望设置我的包,因此如果用户使用 安装依赖项poetry install -E redis
,它将安装redis
Celery 块(就像在 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
具有不同选项的相同依赖项(在我的情况下)。
解决方案
这应该通过定义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"
推荐阅读
- python - Python + Selenium + ChromeDriver:尝试单击类名时出现 ElementNotInteractableException
- python-3.x - 想要使用 python pandas 计算数据集的通过实例数
- sql - 有没有办法逐月显示记录?
- javascript - 如何在按钮单击时运行节点特定功能
- c++ - 如何卸载/销毁 lua 脚本?
- ionic-framework - admob 没有在我的应用程序中使用 ionic 5 显示广告
- javascript - 在 Typescript 中使用 NodeS7 包
- c++ - 花哨的技巧可以在本地破坏反射,但不能在在线编译器中破坏
- jquery - JQuery默认情况延迟淡出,当mouseenter保持可见时,mouseout淡出后
- reactjs - 为什么我的状态没有使用反应钩子更新并使用效果