如何使用 Pipenv 指定多个 sys_platforms

How to specify multiple sys_platforms with Pipenv

我正在尝试使用 Pipenv 来指定特定的软件包仅安装在 Linux 或 Mac 上。 根据 pep496,我应该可以在需求文件中做这样的事情。

unicon; sys_platform == 'linux' or sys_platform  == 'darwin'

这是等效的 Pipfile 部分的样子。

[packages]
requests = "*"
unicon = {version = "*", sys_platform = "== 'linux' or == 'darwin'"}

这将创建一个 Pipfile.lock,没有错误,但也没有任何标记信息。 从 windows 安装时,它应该跳过尝试安装 unicorn 但它没有,并且没有 windows 的独角兽版本,所以我收到安装错误。

我意识到我可能会让事情变得简单,然后就去做 sys_platform = "!= 'win32'" 但我想明确说明平台。

有什么in ['linux', 'darwin']方法可以做到这一点吗?

我找到了 在 Linux 上安装 pypiwin32 的方法。我必须指定另一个未在我的 requirements.txt 中列出的依赖项:pywin32

此外,我使用了 os_name 标记:

pypiwin32 = { version = "==223",  os_name = "=='nt'"}
pywin32 = {version = "*",   os_name = "=='nt'"}

并且这两个包需要Pipfile中的markers:

 "markers": "os_name == 'nt'",

现在可以使用 pipenv 安装了。

使用 markers 而不是 sys_platform,PEP 496 示例中的语法可用于在 Pipfile 中指定多个平台:

[packages]
unicon = {version = "*", markers = "sys_platform == 'linux' or sys_platform == 'darwin'"}