Перейти к содержанию

Virtualenv

Virtualenv
изолированное Python окружение для отдельного проекта.

Позволяет:

  • хранить зависимости отдельно от системы
  • избегать конфликтов версий библиотек
  • делать проекты переносимыми
  • создавать одинаковое окружение для CI/CD и разработки

Зачем нужен virtualenv

Без виртуального окружения Python пакеты устанавливаются глобально в систему.

Это приводит к нескольким проблемам:

  • разные проекты требуют разные версии библиотек
  • обновление пакета может сломать старый проект
  • сложно переносить проект между машинами
  • появляется хаос в зависимостях

Главная идея

Один проект = одно виртуальное окружение.


Как работает virtualenv

Virtualenv создает отдельную директорию с собственным Python interpreter и pip.

При активации изменяется переменная PATH.

Из-за этого терминал начинает использовать Python и pip из .venv вместо системных.


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

python3 -m venv .venv

После выполнения команды появится директория:

.venv/

Внутри неё будут храниться:

  • Python interpreter
  • pip
  • библиотеки
  • конфигурация окружения

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

source .venv/bin/activate
.\.venv\Scripts\activate.bat

После активации появляется:

(.venv)

Это означает что терминал использует Python из virtualenv.

Совет

Используйте отдельный virtualenv для каждого проекта.

выключение virtualenv

если нужно деактивировать вирутальное окружение, то вам поможет команда

deactivate


Проверка virtualenv

Проверить используемый python:

which python
Ожидаемый результат
/ваш_локальный_репозиторий/.venv/bin/python

Что находится внутри .venv

bin/

Исполняемые файлы:

  • python
  • pip
  • activate

lib/

Установленные библиотеки Python.

include/

Файлы для сборки некоторых Python пакетов.

pyvenv.cfg

Конфигурация виртуального окружения.


Как удалить virtualenv

Virtualenv — это обычная директория.

Удаление:

rm -rf .venv

best practice

workflow

mkdir myproject
cd myproject
python3 -m venv .venv
source .venv/bin/activate
pip install requests
pip freeze > requirements.txt
...
...
deactivate

Добавляем .venv в .gitignore

это нужно чтобы в гит репозиторий не попадали лишние файлы

В корне вашего проекта создаем файл .gitignore со следующим содержимым:

.venv/
Затем добавляем данный файл в индекс, выполняем коммит и пушим его в репозиторий.


anti-patterns

Установка пакетов через sudo pip install

Плохо:

sudo pip install requests
Почему плохо:

  • ломает системный Python
  • конфликтует с пакетным менеджером OS
  • может сломать brew/apt/dnf

Возможные ошибки

activate: no such file or directory

Причины:

  • окружение не создано
  • неправильный путь
  • используется другая shell

pip installs packages globally

Причина: virtualenv не активирован.

Важно

Если virtualenv не активирован — pip установит пакеты глобально.


externally-managed-environment

Ошибка появляется на новых macOS и Linux системах.

Решение: использовать virtualenv вместо глобального pip install.