Можно ли создать автономный файл для импорта библиотеки Python, созданной с помощью pybind?

Надеюсь, я понял свой вопрос, если нет, пожалуйста, скажите мне.

Я использую привязки Python OpenImageIO (pybind11) для некоторых скриптов, которые будут выполняться на сотнях компьютеров. К сожалению, мне потребовалось много времени, чтобы установить OpenImageIO и заставить его работать с моей установкой Python2. Я хотел бы знать, есть ли способ создать файл / папку, которые я мог бы отправить на другие компьютеры, чтобы они могли установить модуль Python просто с помощью "pip install file/folder".

Спасибо за вашу помощь

1 ответ

Вы запускаете сценарии в вычислительном кластере с общей файловой системой? В таком случае нет необходимости создавать отдельные установки python для каждой машины. Самое простое решение - создать ОДНУ среду python в месте, доступном для всех ваших машин. Простой способ создать среду Python вне системы - использовать Miniconda. Установите его в общую (сетевую) папку и создайте среду для использования всеми вашими машинами.

Если ваши машины НЕ имеют общей файловой системы, вам нужно каким-то образом воспроизвести среду на всех из них независимо. В этом случае нет простого способа сделать это с помощьюpip.**

Но если вы можете использовать condaвместо этого есть очень простое решение. Во-первых, установите все необходимое в единую среду conda. Затем у вас есть выбор: вы можете экспортировать список пакетов conda или просто скопировать весь каталог среды conda на другие машины.

OpenImageIO доступен из conda-forgechannel, репозиторий пакетов conda, разработанный сообществом. Название пакетаpy-openimageio. Они перестали обновлять версию python-2.7, но старые версии все еще доступны.

Вот как это сделать.

  1. Установите Miniconda-2.7
  1. Создайте новую среду с 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!')"
  1. Выполните одно из следующих действий:

    а. Экспортируйте список пакетов в вашей среде:

    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, с другой стороны, была разработана именно для этого сценария использования и идеально для него работает.

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