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作为必需的依赖项?
尝试这样:
[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”之间区分大小写的差异。线路的顺序也至关重要。