如何在诗歌和 pyproject.toml 中添加库的可选依赖项作为“额外”?

Azi*_*bro 9 python pip spacy python-poetry pyproject.toml

我正在使用pyproject和构建一个 Python 包poetry。我的pyproject.toml看起来像这样:

[tool.poetry]
authors = ["test"]
description = ""
name = "test"
version = "0.1.0"

[tool.poetry.dependencies]
spacy = {extras = ["cuda113"], version = "^3.2.3"}
faiss-gpu = {version = "1.7.2", optional = true}

[tool.poetry.extras]
gpu = ["faiss-gpu"]
Run Code Online (Sandbox Code Playgroud)

这将faiss-gpu作为额外使用成功安装poetry install -E gpu

但是,我想仅在提供spacy[cuda113]时安装(GPU 版本) 。poetry install -E gpu正常poetry install的应该只安装spacy(CPU版本)。

我尝试过使用以下配置,但这使得所有配置都是spacy可选的并且不会安装它。只有spacy[cuda113](GPU 版本)必须是可选的。

[tool.poetry]
authors = ["test"]
description = ""
name = "test"
version = "0.1.0"

[tool.poetry.dependencies]
spacy = {extras = ["cuda113"], version = "^3.2.3", optional = true}
faiss-gpu = {version = "1.7.2", optional = true}

[tool.poetry.extras]
gpu = ["faiss-gpu", "spacy"]
Run Code Online (Sandbox Code Playgroud)

有没有办法使spacy[cuda113]可选但spacy作为必需的依赖项?

wim*_*wim 1

尝试这样:

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

[tool.poetry]
authors = ["test"]
description = ""
name = "test"
version = "0.1.0"

[tool.poetry.dependencies]
python = "^3.10"
faiss-gpu = {version = "1.7.2", optional = true}
spacy = {extras = ["cuda113"], version = "^3.2.3", optional = true}
Spacy = "^3.2.3"

[tool.poetry.extras]
gpu = ["faiss-gpu", "spacy"]
Run Code Online (Sandbox Code Playgroud)

test它生成像这样的 dist-info METADATA 行,就 pip 如何安装vs而言,它看起来是正确的test[gpu]

Metadata-Version: 2.1
Name: test
Version: 0.1.0
Summary: 
Author: test
Requires-Python: >=3.10,<4.0
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Provides-Extra: gpu
Requires-Dist: Spacy (>=3.2.3,<4.0.0)
Requires-Dist: faiss-gpu (==1.7.2); extra == "gpu"
Requires-Dist: spacy[cuda113] (>=3.2.3,<4.0.0); extra == "gpu"
Run Code Online (Sandbox Code Playgroud)

免责声明:我认为我依靠诗歌中的错误和/或实现细节来实现这一点。请注意依赖项规范中“spacy”和“Spacy”之间区分大小写的差异。线路的顺序也至关重要。

  • @azizbro **它确实有效**。我已经测试并验证了这一点,现在可以在具有不同诗歌版本的两台不同机器上工作(Python 3.10 +诗歌1.1.13和Python 3.8 +诗歌1.1.11)。请参阅 https://replit.com/@wimglenn/ExampleSpacyGPU#pyproject.toml - 创建了一个新的环境,删除了锁定文件,然后运行`poetry install -E gpu`,它拉入`cupy-cuda113`(检查 pip freeze外壳选项卡)。安装“cupy-cuda113”的唯一方法是通过 spacy 的 gpu extra。 (2认同)