Виртуальные окружения — зачем они нужны
Прежде чем вводить команду создания окружения — разберём проблему, которую оно решает. Без этого команда — просто ещё одна строчка для заучивания наизусть.
Прежде чем показывать команду для создания виртуального окружения, разберём, зачем оно вообще нужно — на конкретной проблеме, с которой рано или поздно сталкивается каждый.
Представьте такую ситуацию
Вы работаете над двумя проектами на одном компьютере:
- Проект А — старый учебный проект, который использует библиотеку
requestsверсии 2.25 (написан давно, и обновлять его пока незачем); - Проект Б — новый проект, для которого нужна свежая
requestsверсии 2.32 — там есть функции, которых не было в старой версии.
Если бы существовал только один, общий на весь компьютер Python со своим единственным набором пакетов — установить сразу обе версии одной и той же библиотеки было бы невозможно. Установка новой версии для проекта Б автоматически сломала бы проект А.
Решение: своя копия окружения для каждого проекта
Виртуальное окружение (virtual environment, сокращённо venv) — это лёгкая, изолированная «копия» интерпретатора Python вместе с собственным, отдельным набором установленных пакетов, привязанная к одному конкретному проекту.
Технически это не полная копия самого интерпретатора (не тратится гигабайт места на каждый проект) — venv переиспользует основной установленный Python, но заводит для проекта отдельную, независимую папку с пакетами. Для вас как для разработчика разница неощутима: внутри активированного окружения пакеты, установленные для одного проекта, попросту не видны другому.
Не только про конфликты версий
У виртуальных окружений есть и другие практические плюсы:
- Воспроизводимость — список пакетов проекта можно сохранить в файл и точно восстановить такое же окружение на другом компьютере;
- Чистота — удалить окружение проекта так же просто, как удалить одну папку, не затрагивая остальную систему;
- Безопасность системы — на macOS и особенно на Linux (раздел 2.5) это ещё и способ вообще не трогать системный Python.
В следующем разделе — команда для создания окружения и разбор того, что она реально создаёт на диске.