[英]Python poetry - how to install optional dependencies?
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.
如果您想在安裝期間使用-E
標志,您需要將tool.poetry.extras
組添加到您的pyproject.toml
,如文檔的本節所述:
[tool.poetry.extras]
caching = ["redis"]
鍵是指您與poetry install -E
一起使用的詞,值是添加時標記為--optional
的包的列表。 當前不支持在添加過程pyproject.toml
可選包作為特定組的一部分,因此您必須手動在pyproject.toml
文件中維護此部分。
這個額外的抽象層背后的原因是額外安裝通常指的是通過安裝一個或多個依賴項(在這種情況下只是redis
)啟用的一些可選功能(在這種情況下是caching
)。 poetry
在這里簡單地模仿了setuptools
對額外安裝的定義,這可能解釋了為什么它的文檔如此之少。
我要補充的是,不僅您必須手動添加這個 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"]
投票贊成 Drachenfels 的回答。
開發依賴不能是可選的,否則,無論您如何使用附加功能調整它或使用poetry install -E
重試,它都永遠不會安裝。
這聽起來像一個錯誤,但不知何故是設計使然,
...這不是我要添加的內容。 打包項目時,將在分發元數據中引用 Extras,但開發依賴項不會,這將導致 Extras 損壞。
— 一位維護者在 Poetry PR#606 評論中得出結論。 有關詳細信息,請參見此處: https://github.com/python-poetry/poetry/pull/606#issuecomment-437943927
我會說我可以接受無法實現可選開發依賴的事實。 但是,當我有這樣的配置時,至少 Poetry 應該警告我。 如果是這樣,我就不會困惑很長時間,閱讀幫助手冊的每個角落並沒有發現任何幫助。
我發現有些人確實陷入了這個問題( 詩歌是否忽略了額外內容或 pyproject.toml 配置錯誤? )但他們的問題已關閉,標記為重復並重新鏈接到此問題。 因此,我決定在這里回答並提供有關此問題的更多詳細信息。
現在可以使用“附加”組(使用 Poetry 版本 1.2;甚至可能是更早的版本):
poetry add redis --group=extras
它將出現在部分
[tool.poetry.group.extras.dependencies]
這也是較新的風格(與[tool.poetry.extras]
或[tool.poetry.extras.dependencies]
請參閱文檔。 有趣的是,這仍然遵循舊樣式[tool.poetry.extras]
,並且沒有顯示使用poetry add
,但上面的結果是我得到的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.