Код
#статьи

Python venv: что такое виртуальное окружение и как им пользоваться

Учимся изолировать код от внешнего мира и предотвращать хаос в зависимостях.

Иллюстрация: Оля Ежак для Skillbox Media

Виртуальное окружение (venv, virtual environment) в Python — это изолированное рабочее пространство для проектов. Представьте, что ваш компьютер — дом со множеством комнат. Виртуальное окружение в этом случае — отдельная комната с инструментами, мебелью и всем необходимым для работы над конкретным проектом. Вы можете создать сколько угодно таких комнат, и каждая будет существовать независимо от других. Благодаря этому вы сможете переключаться между проектами, не смешивая их содержимое.

Мы упомянули понятие «виртуальное окружение» вместе с терминами virtual environment и venv, которые часто используются как синонимы. Однако между ними есть разница: virtual environment — это общий термин, обозначающий концепцию изолированной среды в Python, а venv — конкретный модуль в стандартной библиотеке Python для создания виртуальных окружений. В статье мы создадим виртуальное окружение с помощью venv, активируем его и потренируемся им пользоваться.

Содержание

Подготовительная часть

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

«Как запустить Python офлайн и онлайн: руководство для новичка» — статья, в которой мы рассматриваем системные требования, помогаем с выбором версии языка и предлагаем пошаговые инструкции по установке Python на Windows, Linux и macOS.

После установки Python откройте терминал и введите следующую команду. Она должна вывести номер установленной версии:

python --version

Если вы установили Python по нашему руководству, то уже познакомились с основными командами терминала. В дальнейшем мы будем использовать такие же простые команды, поэтому специально изучать работу с терминалом не обязательно. Однако, если хотите углубиться в тему, рекомендуем ознакомиться со статьёй «Основные команды и горячие клавиши терминала Linux (а также Unix, macOS и FreeBSD)».

«Visual Studio Code: установка, настройка, русификация и список горячих клавиш» — подробное руководство по настройке бесплатного редактора VS Code. Рекомендуем также установить расширение Python для VS Code, которое включает функции отладки, автодополнения кода, форматирования и интеграции с виртуальными окружениями.

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

  • Разработка нескольких проектов с разными зависимостями. Например, один проект может требовать Python 3.7 и Django 2.2, а другой — Python 3.9 и Django 3.2. Виртуальные окружения позволяют легко переключаться между обоими проектами на одном компьютере, избегая конфликтов между версиями.
  • Изоляция проекта от системных библиотек. Предположим, на вашем компьютере установлена версия NumPy 1.18, а проекту требуется версия 1.20. Виртуальное окружение позволяет установить и использовать нужную версию библиотеки для конкретного проекта, не затрагивая системные установки.
  • Обучение и экспериментирование. Виртуальные окружения служат безопасной площадкой для изучения новых библиотек и версий Python. Они позволяют тестировать инструменты без риска нарушить работу существующих проектов.
  • Упрощение развёртывания проектов на разных машинах. Виртуальное окружение облегчает передачу проекта другим разработчикам или клиентам. Достаточно отправить коллеге файл со списком всех зависимостей проекта и их версий, и он сможет воссоздать копию вашей рабочей среды на своём компьютере.

Как создать виртуальное окружение: create venv python

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

python -m venv my_project_environment

В этой команде my_project_environment — это название виртуального окружения. Хотя оно может быть любым, старайтесь выбирать имя, которое отражает суть проекта. Лучше использовать длинное и понятное название, чем короткую аббревиатуру.

Перейдём к практике и разберём сценарий, когда на одном компьютере нам нужно создавать два проекта: первый — на Django 2.2, а второй — на Django 3.2.

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

# Создание виртуального окружения для проекта с Django 2.2
python -m venv django_2_2_env

# Создание виртуального окружения для проекта с Django 3.2
python -m venv django_3_2_env

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

Интерфейс терминала после создания двух виртуальных окружений
Скриншот: Командная строка Windows / Skillbox Media

Как активировать виртуальное окружение: activate venv python

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

  • для Windows: myenv\\Scripts\\activate;
  • для macOS и Linux: source myenv/bin/activate.

После активации все команды языка Python и менеджера пакетов PIP будут работать с версиями и пакетами, установленными в этом окружении.

Мы создали два виртуальных окружения, но активировать можно только одно за раз. Давайте активируем окружение django_2_2_env в Windows:

django_2_2_env\Scripts\activate
Интерфейс терминала после активации виртуального окружения
Скриншот: Командная строка Windows / Skillbox Media

Теперь перейдём в VS Code и убедимся, что виртуальное окружение активировано и мы можем начать работу над нашим проектом:

  • введите в терминале команду code . для запуска VS Code;
  • в VS Code откройте новый терминал через меню View → Terminal;
  • убедитесь, что в терминале VS Code отображается название вашего виртуального окружения. В нашем случае это django_2_2_env.

Если всё прошло успешно 😁, вы можете сразу приступить к работе. Если нет — изучите сообщения в терминале и определите, что именно нужно исправить. Например, мы столкнулись с проблемой активации виртуального окружения через команду терминала из-за политики выполнения PowerShell. Это распространённая ситуация в Windows.

Пример ошибки активации виртуального окружения в редакторе VS Code
Скриншот: Visual Studio Code / Skillbox Media

Если столкнётесь с такой же проблемой, откройте PowerShell от имени администратора и выполните следующую команду:

Set-ExecutionPolicy RemoteSigned

После этого появится запрос на подтверждение изменения политики выполнения скриптов. Введите Y, нажмите Enter и попробуйте снова активировать виртуальное окружение.

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

path\to\venv\Scripts\activate.bat

path\to\venv\ — это путь к вашему виртуальному окружению. В нашем примере команда будет выглядеть так:

django_2_2_env\Scripts\activate.bat

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

Мы устранили ошибку, активировали виртуальное окружение и теперь можем приступить к работе над проектом. Давайте установим Django 2.2:

pip install django==2.2

Убедимся, что нужная версия Django установлена:

python -m django --version

Также проверим местоположение нашего виртуального окружения:

pip -V
Результат команды показывает, что мы используем PIP версии 24.2 в виртуальном окружении django_2_2_env. Это подтверждает, что мы работаем в нужном окружении с Django 2.2. Также в выводе указана версия Python. В данном случае это новая версия Python 3.12, которая может быть несовместима с Django 2.2
Скриншот: Visual Studio Code / Skillbox Media

После активации виртуального окружения Python создаёт структуру файлов и папок, обеспечивающую изоляцию проекта и управление зависимостями. Эта структура включает в себя папки Include, Lib и Scripts, а также файл pyvenv.cfg:

Структура файлов и папок виртуального окружения Python venv
Скриншот: Visual Studio Code / Skillbox Media

Папка Include содержит специальные файлы, необходимые для компиляции некоторых Python-пакетов. Например, при установке библиотеки NumPy, которая включает части кода на языке C, система использует файлы из этой папки для компиляции и установки пакета в вашем виртуальном окружении. Изначально эта папка пуста, а необходимые файлы создаются по мере установки определённых пакетов.

Папка Lib содержит все установленные библиотеки и пакеты для данного окружения. Например, если вы установили в виртуальное окружение Django 3.2, в папке Lib/site-packages будет храниться директория django со всеми файлами этого фреймворка.

Папка Scripts содержит исполняемые файлы и скрипты для работы с окружением. Вот её основное содержимое:

  • activate и activate.bat — скрипты для активации виртуального окружения;
  • deactivate.bat — скрипт для деактивации окружения;
  • python.exe — исполняемый файл Python для данного окружения;
  • pip.exe — утилита для установки пакетов и управления ими.

Pyvenv.cfg — это конфигурационный файл, обеспечивающий корректную работу виртуального окружения. Он указывает системе, какую версию Python и какие настройки применить при активации окружения.

Как выйти из виртуального окружения: deactivate venv python

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

deactivate

После этого введите pip -V и убедитесь, что вы больше не находитесь в виртуальном окружении. Если деактивация не произошла, перезапустите VS Code и повторите процесс. Вот несколько дополнительных советов:

  • python -m venv --help — используйте эту команду для просмотра всех доступных опций при создании виртуального окружения и работе с ним.
  • Virtualenvwrapper — попробуйте этот инструмент, если вам часто приходится создавать несколько виртуальных окружений и переключаться между ними. Он удобнее стандартного venv, поскольку предоставляет простые команды для управления виртуальными окружениями и хранит все окружения в одном месте.
  • pip install --upgrade [имя_пакета] — применяйте эту команду примерно раз в месяц или при выходе важных обновлений безопасности. Это поможет поддерживать актуальность пакетов в вашем виртуальном окружении.

Теперь активируем второе виртуальное окружение django_3_2_env:

django_3_2_env\Scripts\activate.bat

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

  • в Windows: rmdir /s /q имя_окружения;
  • в macOS и Linux: rm -rf имя_окружения.

имя_окружения — название окружения, которое вы деактивировали и хотите удалить.

Теперь применим новую команду и попробуем удалить второе окружение:

rmdir /s django_3_2_env

Эта команда должна полностью удалить директорию виртуального окружения, однако иногда она не срабатывает и выдаёт такую ошибку:

+ CategoryInfo : InvalidArgument: (:) [Remove-Item], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

Эта ошибка часто возникает из-за особенностей работы PowerShell в Windows, связанных с ограничениями доступа или блокировкой файлов системой. Для её устранения воспользуйтесь альтернативной командой:

Remove-Item -Recurse -Force django_3_2_env

Если альтернативная команда не сработала, закройте все программы и процессы, которые могут использовать файлы в этой директории. Затем перезапустите редактор кода и попробуйте снова удалить окружение. Такова она, жизнь программиста ¯\(ツ)/¯

Мы удалили django_3_2_env, и в каталоге файлов осталось лишь django_2_2_env. Вместе с удалённым окружением исчез и его конфигурационный файл
Скриншот: Visual Studio Code / Skillbox Media

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

Помимо venv, есть и другие инструменты для создания изолированных сред в Python, которые лучше подходят для определённых задач. Рассмотрим некоторые из них:

  • Virtualenv поддерживает старые версии Python и предоставляет больше функций, чем venv. Например, Virtualenv позволяет указать конкретную директорию для установки пакетов, в то время как venv использует фиксированный подкаталог. Такая гибкость делает Virtualenv удобным для сложных проектов.
  • Conda управляет пакетами Python и системными зависимостями, что делает его подходящим для сложных проектов в data science и машинном обучении. Например, одной командой Conda может создать окружение с Python 3.8, TensorFlow 2.4.0 и OpenCV. В сравнении с Conda у venv более ограниченная функциональность: он создаёт окружения только для Python и его пакетов, не управляет системными зависимостями и работает с уже установленной версией Python.
  • Pipenv объединяет управление зависимостями и виртуальными окружениями в одном инструменте — воспроизводимой среде разработки. У venv более узкая функциональность: он не управляет зависимостями автоматически и не предоставляет инструментов для разделения сред разработки и продакшена.
  • Poetry управляет зависимостями, сборкой и публикацией пакетов в Python. Его часто применяют в проектах, требующих точного контроля версий. Poetry позволяет указывать конкретные версии пакетов, чтобы обеспечить единую среду разработки для всех участников проекта и избежать ошибок из-за разных версий проекта.

Выбор инструмента зависит от специфики проекта, личных предпочтений и требований команды. Например, специалист по data science может предпочесть Conda вместо venv для работы с большими объёмами данных и выполнения сложных вычислений.

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована