Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Виртуальные окружения Python: Настройка окружения

Как уже говорилось ранее, pip устанавливает пакеты в одно из двух окружений — в общесистемное или пользовательское. Интерпретатор Python при импорте модуля или пакета ищет его сначала в пользовательском окружении, затем в общесистемном. Такая последовательность позволяет пользователю иметь нужные именно ему версии библиотек и Python программ. Но даже двух окружений недостаточно, когда программист начинает работать с несколькими проектами: разные проекты могут иметь разные наборы зависимостей. Ещё более тяжелый случай: разные проекты могут зависеть от общей библиотеки, но требовать разные её версии — конфликт версий.

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

Устройство виртуальных окружений

Каждое виртуальное окружение представляет собой директорию, содержимое которой структурно напоминает общесистемное окружение — поддиректории соответственно названы и наполнены. Давайте рассмотрим пример:

$ tree env
env
├── bin
│   ├── activate
│   …
│   ├── pip
│   …
│   └── python3 -> …/python3
├── lib
│   └── python3.6
│       └── site-packages
│           ├── pip
│           │   ├── …
│           …
│           └── setuptools-40.6.2.dist-info
│               ├── …
…

В директории виртуального окружения находится директория bin/ внутри которой находится копия (или символическая ссылка на оригинал) интерпретатора под именем python3, а рядом с ней находится копия исполняемого файла pip. В соседней директории по пути lib/python3.6/site-packages находятся библиотеки, уже установленные в окружение: только что созданное окружение как правило имеет установленный пакет pip (а исполняемый файл bin/pip — его точка входа), а также пакет setuptools — эти два пакета составляют "необходимый минимум" для разработки проекта на Python.

При работе в окружении нужно запускать не системные Python и pip, а исполняемые файлы из директории bin. Дело в том, что интерпретатор Python, когда находится в окружении, знает, что по относительному (к директории bin) пути ../lib/python3.6 находятся все доступные пакеты. И копия pip из директории bin/ устанавливает пакеты в это же окружение, не затрагивая систему. Получается та самая желанная изоляция!

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

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

В macOS и Windows этот модуль, как и pip, входит в поставку Python. На Ubuntu же его нужно установить отдельно командой

$ sudo apt install python3-venv

Проверим, что модуль установлен и пригоден к использованию:

$ python3 -m venv --help
usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] [--upgrade] [--without-pip] [--prompt PROMPT] ENV_DIR [ENV_DIR ...]

Создаётся окружение командой python3 -m venv имя_окружения. Давайте создадим одно и установим в это окружение пакет cowsay:

Вы можете видеть, что пакет устанавливается вместе с точкой входа, которую можно вызвать командой first_venv/bin/cowsay, а также сам пакет становится доступен интерпретатору, но только тому, что запущен из окружения.

В принципе в таком виде виртуальное окружение уже можно использовать полноценно. Но вводить команды с префиксом first_env/bin/ не очень-то хочется, и есть способ упростить вызов команд, доступных в окружении — активация.

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

При создании окружения в поддиректорию bin помещается сценарий оболочки, который на macOS и Ubuntu называется activate, а на Windows — activate.bat. Этот сценарий нужно выполнить:

  • на macOS и Ubuntu вызвать команду
$ source first_venv/bin/activate
  • на Windows вызвать команду
C:\> first_venv\Scripts\activate.bat

Заметьте, в Windows поддиректория с исполняемыми файлами называется не bin, а Scripts!

На Ubuntu активация выглядит следующим образом:

Вы можете заметить, что после активации отпала необходимость указывать путь до вызываемого исполняемого файла — cowsay и python в аскинеме вызываются без префикса, но это всё те же команды из окружения!

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

Деактивация же окружения делается командой deactivate, которая становится доступна после активации.

Активирование и деактивация окружения влияют только на текущую сессию (заметны только в этом конкретном терминале). Что позволяет иметь несколько окружений и активировать их одновременно в разных окнах терминала.

Итого

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


Дополнительные материалы

  1. venv — Creation of virtual environments
  2. pipx — установщик Python-программ

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

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

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 120 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
1 декабря 8 месяцев

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»