Как указать несколько sys_platforms с 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'] способ сделать это?

2 ответа

С использованием markersвместо sys_platform, синтаксис из вашего примера PEP 496 можно использовать для указания нескольких платформ в Pipfile:

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

Я только что нашел способ не устанавливать pypiwin32 на Linux-машину

Мне пришлось указать другую зависимость, не указанную в моем требовании: pywin32

Более того, я использовал маркер os_name:

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

наконец, два пакета имеют маркер в pipfile:

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

И установка пипенв работает

Поэтому проверьте возможную зависимость

Надеюсь, это поможет тебе, если еще не поздно

Другие вопросы по тегам