Короткий ответ
Виртуальное окружение — изолированный набор интерпретатора и пакетов для конкретного проекта, который не затрагивает системный Python и другие проекты; без него проекты с конфликтующими версиями одной библиотеки не могут нормально сосуществовать на одной машине.
Как это работает подробнее
python -m venv .venv создаёт отдельную директорию с собственным site-packages; при активации PATH и sys.prefix переключаются на этот каталог, поэтому pip install ставит пакеты именно туда.
Пример кода
Команды терминала
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python -c "import sys; print(sys.prefix)" # путь внутри .venv
deactivateЧто использовать на практике
- Рекомендация. venv создают отдельно для каждого проекта, коммитят только список зависимостей, а сам каталог
.venvдобавляют в.gitignore. Для воспроизводимости на других машинах окружение пересоздают из файла зависимостей.
Подводные камни
- Риск. установка пакетов глобально через
sudo pip install— ломает системный Python и создаёт конфликты версий между проектами; забывают активировать venv и ставят пакет не туда.