Можно ли создать автономный файл для импорта библиотеки Python, созданной с помощью pybind?
Надеюсь, я понял свой вопрос, если нет, пожалуйста, скажите мне.
Я использую привязки Python OpenImageIO (pybind11) для некоторых скриптов, которые будут выполняться на сотнях компьютеров. К сожалению, мне потребовалось много времени, чтобы установить OpenImageIO и заставить его работать с моей установкой Python2. Я хотел бы знать, есть ли способ создать файл / папку, которые я мог бы отправить на другие компьютеры, чтобы они могли установить модуль Python просто с помощью "pip install file/folder".
Спасибо за вашу помощь
1 ответ
Вы запускаете сценарии в вычислительном кластере с общей файловой системой? В таком случае нет необходимости создавать отдельные установки python для каждой машины. Самое простое решение - создать ОДНУ среду python в месте, доступном для всех ваших машин. Простой способ создать среду Python вне системы - использовать Miniconda. Установите его в общую (сетевую) папку и создайте среду для использования всеми вашими машинами.
Если ваши машины НЕ имеют общей файловой системы, вам нужно каким-то образом воспроизвести среду на всех из них независимо. В этом случае нет простого способа сделать это с помощьюpip
.**
Но если вы можете использовать conda
вместо этого есть очень простое решение. Во-первых, установите все необходимое в единую среду conda. Затем у вас есть выбор: вы можете экспортировать список пакетов conda или просто скопировать весь каталог среды conda на другие машины.
OpenImageIO доступен из conda-forge
channel, репозиторий пакетов conda, разработанный сообществом. Название пакетаpy-openimageio
. Они перестали обновлять версию python-2.7, но старые версии все еще доступны.
Вот как это сделать.
- Установите Miniconda-2.7
- Создайте новую среду с python 2.7, OpenImageIO и любыми другими необходимыми вам пакетами:
conda create -n jao-stuff -c conda-forge py-openimageio python=2.7
conda activate jao-stuff
python -c "import OpenImageIO; print('It works!')"
Выполните одно из следующих действий:
а. Экспортируйте список пакетов в вашей среде:
conda env export -n jao-stuff -f jao-stuff-packages.yaml
Затем на других машинах установите Miniconda, затем создайте среды, используя список пакетов из предыдущего шага:
conda create -n jao-stuff --file jao-stuff-packages.yaml
ИЛИ
б. Просто скопируйте все файлы в среде на другие машины и запустите их напрямую. Среды Conda являются автономными (за исключением нескольких низкоуровневых системных библиотек), поэтому обычно вы можете просто скопировать все это на другой компьютер и запустить без каких-либо дополнительных шагов установки.
tar czf jao-stuff.tar.gz $(conda info --prefix)/envs/jao-stuff
На другом компьютере распакуйте архив в любом месте и просто запустите
python
исполняемый файл он содержит:tar xzf jao-stuff.tar.gz jao-stuff/bin/python -c "import OpenImageIO; print('It works!')"
** Это потому, что OpenImageIO - это проект C++ с несколькими зависимостями C++, и они не предоставляют двоичные файлы в wheel
формат. Я не виню их - pip не очень подходит для этого варианта использования, даже с колесами. Conda, с другой стороны, была разработана именно для этого сценария использования и идеально для него работает.