Учимся изолировать код от внешнего мира и предотвращать хаос в зависимостях.
Мы упомянули понятие «виртуальное окружение» вместе с терминами 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_envScriptsactivate
Интерфейс терминала после активации виртуального окружения
Скриншот: Командная строка 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 и попробуйте снова активировать виртуальное окружение.
Если предыдущий метод не сработал, попробуйте альтернативный способ активации виртуального окружения. Эта команда напрямую запускает скрипт активации, обходя некоторые ограничения безопасности:
pathtovenvScriptsactivate.bat
pathtovenv — это путь к вашему виртуальному окружению. В нашем примере команда будет выглядеть так:
django_2_2_envScriptsactivate.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
- activate и activate.bat — скрипты для активации виртуального окружения;
- deactivate.bat — скрипт для деактивации окружения;
- python.exe — исполняемый файл Python для данного окружения;
- pip.exe — утилита для установки пакетов и управления ими.
Как выйти из виртуального окружения: deactivate venv python
Допустим, мы хотим выйти из виртуального окружения в основное пространство системы. Для этого достаточно выполнить простую команду:
deactivate
После этого введите pip -V и убедитесь, что вы больше не находитесь в виртуальном окружении. Если деактивация не произошла, перезапустите VS Code и повторите процесс. Вот несколько дополнительных советов:
- python -m venv –help — используйте эту команду для просмотра всех доступных опций при создании виртуального окружения и работе с ним.
- Virtualenvwrapper — попробуйте этот инструмент, если вам часто приходится создавать несколько виртуальных окружений и переключаться между ними. Он удобнее стандартного venv, поскольку предоставляет простые команды для управления виртуальными окружениями и хранит все окружения в одном месте.
- pip install –upgrade [имя_пакета] — применяйте эту команду примерно раз в месяц или при выходе важных обновлений безопасности. Это поможет поддерживать актуальность пакетов в вашем виртуальном окружении.
Теперь активируем второе виртуальное окружение django_3_2_env:
django_3_2_envScriptsactivate.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, которые лучше подходят для определённых задач. Рассмотрим некоторые из них:
Выбор инструмента зависит от специфики проекта, личных предпочтений и требований команды. Например, специалист по data science может предпочесть Conda вместо venv для работы с большими объёмами данных и выполнения сложных вычислений.
Директория — это папка на компьютере, содержащая файлы и другие папки. Например, директория «Документы» может хранить ваши рабочие файлы.