Python venv: различия между версиями

Материал из WiKi - UserSide
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
== Общая информация о виртуальных средах ==
Помимо глобальной установки зависимостей для модулей, написанных на Python, также можно использовать локальную (виртуальную) среду, которая будет содержать весь необходимый набор модулей и без проблем может поддаваться бесконфликтным изменениям (обновлению, переустановке, удалению и т.д.).
Помимо глобальной установки зависимостей для модулей, написанных на Python, также можно использовать локальную (виртуальную) среду, которая будет содержать весь необходимый набор модулей и без проблем может поддаваться бесконфликтным изменениям (обновлению, переустановке, удалению и т.д.).


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


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


Далее в примере будет рассмотрено использование стандартного модуля venv.
Далее в примере будет рассмотрено использование стандартного модуля venv.
Строка 27: Строка 29:
  */2 * * * *    root    /opt/usm_checker/venv/bin/python /opt/usm_checker/usm_checker.py > /dev/null 2>&1
  */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.
Так как виртуальная среда соответствует одной конкретной версии python, то нет смысла указывать явно интерпретатор python3 или python3.7, хоть это и не будет ошибкой. Виртуальная среда содержит три символические ссылки с именами python, python3, python3.7, которые ссылаются на один и тот же исполняемый файл. Тоже самое касается модуля pip - он также имеет три абсолютно одинаковых исполняемых файла pip, pip3, pip3.7.

Версия от 11:27, 28 января 2020

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

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