Виртуальные окружения python

Виртуальное окружение

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

Виртуальное окружение - это инструмент, позволяющий создавать создать локальную папку с набором необходимых версий библиотек необходимых для работы над отдельным проеком.

Разные виртуальные окружния могут иметь разный набор пакетов разных версий. Работая над конкретным проектом, вы просто переключаетесь на подходящее окружение, и проблема уходит. Одно и то же окружение можно использовать сразу в нескольких проектах. Плюс к этому уходит проблема засорения системы пакетами, так как окружения можно легко создавать и удалять. Создавая проекты на желательно используя виртуальные окружения!

Задачи виртуального окружения

При разработке Python-приложений может возникнуть ряд проблем, связанных с использованием библиотек различных версий. Рассмотрим их более подробно:

  • различные приложения могут использовать одну и туже библиотеку, но при этом требуемые версии могут отличаться.
  • может возникнуть необходимость в том, чтобы запретить вносить изменения в приложение на уровне библиотек, т.е. вы установили приложение и хотите, чтобы оно работало независимо от того обновляются у вас библиотеки или нет. Если приложение будет использовать библиотеки из глобального хранилища, то, со временем, могут возникнуть проблемы.
  • у вас просто может не быть доступа к каталогу глобальной базе библиотек.

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

Cоздание виртуальных окружений

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

Начнем с инструментов, которые входят в PyPI. Если кто не знает PyPI – это Python Package Index (PyPI) – репозиторий пакетов Python, доступный для любого разработчика и пользователя Python().

virtualenv

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

virtualenvwrapper

Virtualenvwrapper – это обертка для virtualenv позволяющая хранить все изолированные окружения в одном месте, создавать их, копировать и удалять. Предоставляет удобный способ переключения между окружениями и возможность расширять функционал за счет plug-in’ов.

pyenv

Инструмент для изоляции версий Python. Чаще всего применяется, когда на одной машине вам нужно иметь несколько версий интерпретатора для тестирования на них разрабатываемого вами ПО.

venv

Этот модуль, входящий в стандартную библиотеку Python3. По своему функционалу очень похож на virtualenv.

Создание virtualenv

Будем рассматривать работу с virtualenv в рамках операционной системы Linux. Для Windows все будет очень похоже, за исключением моментов, связанных со спецификой этой ОС: названия и расположение каталогов, запуск скриптов оболочки и т.п.

Установка virtualenv

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

Установка с использованием pip

Для установки virtualenv откройте консоль и введите следующую команду:

> pip install virtualenv

Создание виртуального окружения

Переходим в папку где собираетесь создавать виртуальное окружение. Виртуальное окружение создается следующей командой:

> virtualenv first_virt_env

first_virt_env в данном случае – это имя окружения.

После выполнения данной команды, в текущем каталоге будет создан новый каталог с именем first_virt_env. Разберем более подробно его содержимое.

first_virt_env/bin/ (Linux) или first_virt_env\Scripts (Windows) – содержит скрипты для активации/деактивации окружения, интерпретатор Python, используемый в рамках данного окружения, менеджер pip и ещё несколько инструментов, обеспечивающих работу с пакетами Python.

first_virt_env/include/ (Linux) и first_virt_env/lib/ (Windows) – каталоги, содержащие библиотечные файлы окружения. Новые пакеты будут установлены в каталог first_virt_env/lib/site-packages/.

Активация виртуального окружения

Для активации виртуального окружения воспользуйтесь командой (для Linux):

> source first_virt_env/bin/activate

для Windows команда будет выглядеть так:

> first_virt_env\Scripts\activate.bat

Команда source выполняет bash-скрипт без запуска второго bash-процесса.

Если команда выполнилась успешно, то вы увидите, что перед приглашением в командной строке появилась дополнительная надпись, совпадающая с именем виртуального окружения:

C:\code\python_envs>first_virt_env\Scripts\activate.bat

(first_virt_env) C:\code\python_envs>

При этом в переменную окружения PATH, в самое начало, будет добавлен путь до директории bin, созданного каталога first_virt_env.

Если вы создадите виртуальное окружение с ключем –system-site-packages:

> virtualenv --system-site-packages first_virt_env

то в рамках окружения first_virt_env вы будите иметь доступ к глобальному хранилищу пакетов:

  • в Linux: /usr/lib/pythonX.X/site-packages
  • в Windows: \PythonXX\Lib\site-packages

Запуск скриптов

C:\code\python_envs>first_virt_env\Scripts\activate.bat

(first_virt_env) C:\code\python_envs>python hello.py
Hello word!

Деактивация виртуального окружения

Для деактивации виртуального окружения (выхода из него), введите команду deactivate для Linux или deactivate.bat, если вы работаете в Windows.

> deactivate

Результат вывода в консоли:

(first_virt_env) C:\code\python_envs>deactivate.bat
C:\code\python_envs>

Создание venv

Устанавливать venv не нужно, т.к. он входит в стандартную библиотеку Python. Т.е. если вы установили себе Python, то venv у вас уже есть. Помните, что venv работает только в Python3!

Создание виртуального окружения

Для создания виртуального окружения с именем second_virt_env с помощью venv выполните следующую команду:

> python -m venv second_virt_env

В результате будет создан каталог second_virt_env со структурой похожей на ту, что была описана для virtualenv. Функциональное назначение каталогов тоже самое.

Активация виртуального окружения

Активация виртуального окружения в Linux выполняется командой:

>source second_virt_env/bin/activate

в Windows:

>second_virt_env\Scripts\activate.bat

Результат вывода в консоли:

C:\code\python_envs>second_virt_env\Scripts\activate.bat
(second_virt_env) C:\code\python_envs>

Деактивация виртуального окружения

Деактивация выполняется командой deactivate (работает как в Windows, так и в Linux)

>deactivate

Результат вывода в консоли:

(second_virt_env) C:\code\python_envs>deactivate
C:\code\python_envs>

Ссылки на официальную документацию

  1. Документация по virtualenvopen in new window

  2. Документация по virtualenvwrapperopen in new window

  3. Документация по venvopen in new window