Profile picture for user admin_romcom

Часто можно увидеть как разработчики на Питоне устанавливают и обновляют пакеты из стандартных и не стандартных источников для разработки приложений. Причина может быть в использовании новой версии модуля или использование специфической версии для предотвращении регрессий.

Эти требования и кейсы использования могут быть болезненными при управлении когда разные приложения требуют разные версии одних и тех же библиотек. К счастью, Python предоставляет решения для изоляция среды разработки использую виртуальные окружения.

Что такое виртуальное окружение Python (Virtual Environment)

Виртуальное окружение (ВО) Python это директория которая включает в себя инстлляцию Python вместе со стандартными библиотеками. Приложение требуеющее конкретную версию библиотеки может быть изолировано в виртуальном окружении без замусоривания ОС или других имплементаций Python. Каждое виртуальное окружение это отдельная песочница (sandbox), и вы можете создать их сколько сколкьо вам нужно.

Создание и управление виртуальным окружением

Для начала установите необходимые пакеты для Ubuntu:

$ sudo apt install python3-venv

Про команду apt можете подробно почитать в предыдущей статье https://16rom.com/ru/blog/ispolzovanie-komandy-apt-v-linux.

Для устанвки в Debian убедитесь что у вас подключены основные репозитории в /etc/apt/sources.list

Для Debian 9:

deb http://deb.debian.org/debian/ stretch main
deb-src http://deb.debian.org/debian/ stretch main

Для Debian 10:

deb http://deb.debian.org/debian/ buster main
deb-src http://deb.debian.org/debian/ buster main

Теперь вы можете создать виртуальное окружение командой:

$ python3 -m venv myenv

Данная команда создаст виртуальное окружение myenv в текущей папке. Вместо названия папки может указать полный путь к ней:

$ python3 -m venv /home/user/python/myenv

Для активации используйте команду:

$ source myenv/bin/activate

После активации в шеле будет показано текущее активное окружение. Запустив команду “import sys” “sys.path” внутри интерпритатора вы увидите что все работает верно. Питон будет искать пакеты в текущем окружении.

Выключить виртуальное окружение:

$ deactivate

Каждое ВО Python включает в себя файл настройки “pyvenv.cfg” с ключем “include-system-site-packages” выключенным по-умолчанию. Этот ключ указывает ВО использовать ли системные пакеты или нет. Если данным параметр включить Python будет искать пакеты в основной ОС, если не найдет их в ВО.

Для удаление ВО достаточно удалить папку.

Вы можете разместить ВО на флешке использую NTFS или EXT файловую систему. FAT32 неподходит, тк не поддерживает симлинки которые необходимы для работы ВО.

Использование PIP пакетного менеджера для установки пакетов внутри виртуального окружения

Внутри ВО вы можете использовать pip для установки, обновления и удаления пакетов.

$ pip install package_name

Вместо package_name подставьте свое название пакета.

Поиск пакетов по репозиторию можно сделать на сайте https://pypi.org

Удаление пакета:

$ pip uninstall package_name

Посмотреть все версии пакета:

$ pip install package_name==

Список всех установленных пакетов

$ pip list

Сохранить список установленных пакетов внутри ВО:

$ pip freeze > requirements.txt

Вы можете использовать файл requirements.txt для пакетной установки модулей в новом ВО.

$ pip install -r requirements.txt

Использование Виртуального Окружения Python для не-Python приложений

Приложения написанные на других языках программирования могут быть закрыты в песочнице ВО Python до того момента как pip или любой другой пакетный менеджер будет предоствлять бинарники и пакеты для тех альтернативных Япов/фреймворков.

Вот небольшой пример который показывает установку node.js в ВО Python:

$ python3 -m venv node_env
$ source node_env/bin/activate
$ pip install wheel
$ pip install nodeenv
$ nodeenv -p
$ nodeenv --version
$ node --version

Поздравляю, вы создали изолированое окружение node.js. Вы можете создавать много ВО и пакеты установленные через пакетный менеджер npm будут доступны только в виртуальном окружении.

 

Добавить комментарий

The content of this field is kept private and will not be shown publicly.
  • No HTML tags allowed.
   o    o-O-o  o     o--o   o   o 
/ | | | | \ /
O--o | | O-Oo O
o | | | | \ / \
o-o o O---o o o o o

Enter the code depicted in ASCII art style.