Skip to content

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

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

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

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

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

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

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

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

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

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

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

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

  • venv - этот модуль, входящий в стандартную библиотеку Python3. По своему функционалу очень похож на virtualenv. Ссылки на официальную документацию Документация по venv.

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

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

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

Создание venv ​

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

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

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

sh
python -m venv second_virt_env

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

Создайте виртуальное окружение с указанием версии Python. Пример с использованием venv:

sh
py -3.12 -m venv myenv

Здесь py -3.12 указывает на версию Python 3.12. Замените -3.12 на нужную вам версию.

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

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

sh
source second_virt_env/bin/activate

в Windows, соблюдайте наклон черты, чтобы команда указывающая путь к файлу запустилась:

sh
second_virt_env\Scripts\activate.bat

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

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

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

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

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

sh
deactivate

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

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

Создание virtualenv ​

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

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

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

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

sh
pip install virtualenv

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

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

sh
virtualenv first_virt_env

Пример создания виртуального окружения с заданной версией python использованием virtualenv:

sh
virtualenv --python=/path/to/python3.12 myenv

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):

sh
source first_virt_env/bin/activate

Для Windows обязательно учитывать наклон черт разделителей, команда будет выглядеть так:

sh
first_virt_env\Scripts\activate.bat

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

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

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

(first_virt_env) C:\code\python_envs>

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

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

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

sh
virtualenv --system-site-packages first_virt_env

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

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

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

sh
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.

sh
deactivate

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

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