10

我试图用来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 的 unicorn 版本,所以我收到安装错误。

我意识到我可能可以让事情变得简单并且只是做,sys_platform = "!= 'win32'"但我想明确说明这些平台。

有没有in ['linux', 'darwin']办法做到这一点?

4

2 回答 2

3

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

[packages]
unicon = {version = "*", markers = "sys_platform == 'linux' or sys_platform == 'darwin'"}
于 2021-07-14T11:14:20.340 回答
1

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

此外,我使用了os_name标记:

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

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

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

使用 pipenv 的安装现在可以工作了。

于 2020-01-10T14:44:47.177 回答