【问题标题】:How to specify multiple sys_platforms with Pipenv如何使用 Pipenv 指定多个 sys_platforms
【发布时间】:2018-12-10 17:47:32
【问题描述】:

我正在尝试使用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'] 的方法可以做到这一点?

【问题讨论】:

  • 仍然想知道这个问题是否有解决方案。

标签: python pip pipenv pipfile


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

我找到了一种在 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 进行安装了。

【讨论】:

    猜你喜欢
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2021-11-12
    • 2018-11-29
    • 2021-08-16
    相关资源
    最近更新 更多