Python Poetry:如何指定特定于平台的依赖项替代方案?

Igo*_*ejc 8 python python-ldap python-wheel python-poetry

一些背景: 我正在从事的项目使用python-ldap库。由于我们是一个混合操作系统开发团队(一些使用 Linux,一些使用 macOS 和一些 Windows),我试图让项目在所有环境中构建。不幸的是,python-ldapWindows 没有正式支持,但有由 Christoph Gohlke 维护的非官方轮子。我已经测试了轮文件,它工作正常。

问题:我如何告诉 Poetry 在 Windows 上使用轮子以及python-ldap在 Linux 和 macOS 上使用官方包?

我尝试了多种方法,包括使用多个约束依赖项和标记

python-ldap = [
    { markers = "sys_platform == 'linux'", version = "*" },
    { markers = "sys_platform == 'win32'", path="lib/python_ldap-3.2.0-cp36-cp36m-win_amd64.whl" }
Run Code Online (Sandbox Code Playgroud)

......但是,从判断poetry.lock文件,似乎再标记合并,只是确定是否库应安装在所有

[[package]]
category = "main"
description = "Python modules for implementing LDAP clients"
marker = "sys_platform == \"linux\" or sys_platform == \"win32\""
name = "python-ldap"
Run Code Online (Sandbox Code Playgroud)

在 Poetry 中是否有另一种处理特定于平台的依赖项的方法?

Jac*_*ock 10

您可以使用platform关键字

python-ldap = [
    { version = '*', platform = 'linux' },
]
Run Code Online (Sandbox Code Playgroud)

来源


rju*_*ney 10

执行此操作的最佳方法是将--platform选项与poetry add命令一起使用。faiss要在 Mac(faiss-cpu不支持 CUDA GPU)和 Linux(faiss-gpu支持 GPU/CUDA)上安装,请运行以下命令:

# Add each package to your project
poetry add faiss-gpu --platform linux
poetry add faiss-cpu --platform darwin

# Thereafter just install
poetry install
Run Code Online (Sandbox Code Playgroud)

如上所述,您可以pyproject.toml按照其他答案中的描述在文件中执行此操作,但 CLI 是最好的。poetry update如果直接编辑,请务必pyproject.toml

[tool.poetry.dependencies]
faiss-cpu = {version = "^1.7.1", platform = "darwin"}
faiss-gpu = {version = "^1.7.1", platform = "linux"}
Run Code Online (Sandbox Code Playgroud)

哈喽!