Python venv

Материал из WiKi - UserSide

en | ru

Общая информация о виртуальных средах

Помимо глобальной установки зависимостей для модулей, написанных на Python, также можно использовать локальную (виртуальную) среду, которая будет содержать весь необходимый набор модулей и без проблем может поддаваться бесконфликтным изменениям (обновлению, переустановке, удалению и т.д.).

Виртуальная среда - это специальный подкаталог внутри каталога с модулем (обычно именуемый venv), который включает в себя все необходимые средства для запуска модуля: интерпретатор python необходимой версии, служебные пакеты pip и setuptools, пакеты, от которых зависит модуль и другие инструменты. Чтобы запустить модуль userside с использованием виртуальной среды, нужно всего лишь вызвать интерпретатор python, расположенный в этой виртуальной среде. Это автоматически вызовет подключение всех пакетов из виртуальной среды (подкаталога venv).

На сегодняшний день существует несколько модулей python, предназначенных для создания виртуальной среды. Самые распространенные из них: классический virtualenv и появившийся в Pyhon3 встроенный стандартный модуль venv. Стоит, однако, обратить внимание на то, что в Debian (Ubuntu и т.д.) стандартный модуль venv вынесен в отдельный пакет python3-venv, который нужно установить отдельно: sudo apt-get install python3-venv.

Создание виртуальной среды для проекта с использованием venv

Далее в примере будет рассмотрено использование стандартного модуля venv.

Предположим, модуль userside, для которого необходимо настроить виртуальную среду, находится в каталоге /opt/usm_checker. Для начала нужно установить все необходимые системные зависимости модуля. Для usm_checker это пакет python3-dev, без которого невозможна дальнейшая сборка зависимостей.

Перейдите в каталог с модулем userside и выполните команду инициализации виртуального окружения в подкаталоге venv.

cd /opt/usm_checker
python3 -m venv venv
./venv/bin/pip install --upgrade pip setuptools

Теперь необходимо установить зависимости. Однако, нам нужно использовать менеджер пакетов из виртуальной среды, а не глобальный, чтобы установить зависимости в виртуальную среду.

./venv/bin/pip install --upgrade -r requirements.txt

Продолжайте далее следовать инструкции по установке и настройке модуля userside. Выполняйте все действия с поправкой на то, что вы теперь должны использовать интерпретатор из виртуальной среды. Пример использования pip из виртуальной среды был показал выше.

Итак, вместо запуска модуля командой sudo python3 usm_checker.py вам нужно использовать команду:

sudo ./venv/bin/python usm_checker.py

Ну а в cron придется прописать абсолютный путь к интерпретатору и скрипту. По аналогии с примером из документации usm_checker это будет выглядеть так:

*/2 * * * *    root    /opt/usm_checker/venv/bin/python /opt/usm_checker/usm_checker.py > /dev/null 2>&1

Использование virtualenv

Если вы желаете использовать virtualenv вместо venv, то его необходимо установить и затем проинициализировать окружение. Обновлять базовые модули pip и setuptools не нужно, так как во время создания виртуальной среды устанавливаются их последние версии. Все остальные команды идентичны venv.

sudo pip3 install --update virtualenv
cd /opt/usm_checker
python3 -m virtualenv -p /usr/bin/python3.7 venv
./venv/bin/pip install --upgrade -r requirements.txt

И т.д.

Дополнительная информация

Так как виртуальная среда соответствует одной конкретной версии python, то нет смысла указывать явно интерпретатор python3 или python3.7, хоть это и не будет ошибкой. Виртуальная среда содержит три символические ссылки с именами python, python3, python3.7, которые ссылаются на один и тот же исполняемый файл. Тоже самое касается модуля pip - он также имеет три абсолютно одинаковых исполняемых файла pip, pip3, pip3.7.