如何使用Pipenv指定多个sys_platforms

时间:2018-12-10 17:47:32

标签: python pip pipenv pipfile

我正在尝试使用Pipenv指定一个特定的程序包,使其仅安装在Linux或Mac上。 根据{{​​3}},我应该能够在需求文件中执行类似的操作。

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']种方式做到这一点?

2 个答案:

答案 0 :(得分:0)

我刚刚找到了一种在Linux机器上不安装 pypiwin32 的方法

我必须指定我的需求中未列出的另一个依赖项: pywin32

我还使用了 os_name 标记:

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

最后,这两个软件包在pipfile中具有标记:

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

并且pipenv的安装有效

因此请检查最终依赖项

如果还不晚,希望对您有帮助

答案 1 :(得分:0)

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

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