Как указать несколько 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'",
И установка пипенв работает
Поэтому проверьте возможную зависимость
Надеюсь, это поможет тебе, если еще не поздно