Как указать специфичные для ОС файлы wheel в Pipfile

Я пытаюсь использовать pipenv и pytorch.

Чтобы установить pytorch в Windows, мне нужно написать следующие коды в Pipfile:

[packages]
torch = {file = "http://download.pytorch.org/whl/cpu/torch-0.4.1-cp37-cp37m-win_amd64.whl"}

Однако файл колеса для Linux отличается.

[packages]
torch = {file = "http://download.pytorch.org/whl/cpu/torch-0.4.1.post2-cp37-cp37m-linux_x86_64.whl "}

Как указать их обоих в Pipfile?

🤔 А знаете ли вы, что...
В Python есть инструменты для создания графиков и визуализации данных, такие как библиотеки Matplotlib и Seaborn.


4
546
1

Ответ:

Эта статья демонстрирует, как структурировать ваш Pipfile для использования pytorch на нескольких платформах. Я изменил их пример для работы с файлами whl в моей локальной файловой системе:

[packages]
pyfoo = {path = "./../pyfoo/dist/pyfoo-1.1.0-cp37-cp37m-linux_x86_64.whl", platform_system = "== 'Linux'"}
pyfoo-win = {path = "./../pyfoo/dist/pyfoo-1.1.0-py3-none-any.whl", platform_system = "== 'Windows'"}

В данном случае pyfoo - это внутренняя библиотека, созданная с использованием python setup.py build и python setup.py bdist_wheel.

В статье вместо pipenv используется какой-то сгенерированный pyfoo-win хэш. Я не мог заставить pipenv сгенерировать этот хеш, поэтому создал свою собственную строку. Это может быть просто префикс хеша в файле блокировки.

Примечание: Этот подход работает для меня, но есть недостаток: оба файла whl должны присутствовать при установке пакетов. pipenv sync взрывается, если один из них отсутствует, хотя на самом деле ему нужен только один из двух. Интересно, что содержимое нерелевантного файла не имеет значения. На моей Linux-машине я сделал echo 'hello' > с файлом Windows whl, и pipenv остался доволен этим.