Python venv: как создать и активировать виртуальное окружение

Категория: Python · Язык: Bash · Обновлено:

Виртуальное окружение создаёт отдельную копию Python со своими пакетами для каждого проекта. Создайте его командой python -m venv .venv, активируйте source .venv/bin/activate на Linux и macOS или .venv\Scripts\activate на Windows.

Создать окружение

Bash
python -m venv .venv

Команда создаёт папку .venv в текущем каталоге. На Linux и macOS вместо python может понадобиться python3. Название папки может быть любым, .venv и venv самые распространённые.

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

Система

Команда

Linux, macOS (bash, zsh)

source .venv/bin/activate

Windows, PowerShell

.venv\Scripts\Activate.ps1

Windows, командная строка

.venv\Scripts\activate.bat

После активации в начале строки появится (.venv). Команды python и pip теперь относятся к окружению.

Установить пакеты и сохранить список

Bash
pip install requests
pip freeze > requirements.txt     # записать установленные версии
pip install -r requirements.txt   # установить всё из файла на другой машине

Проверить, что вы внутри окружения

Bash
which python        # Linux, macOS: путь должен вести в .venv
python -c "import sys; print(sys.prefix != sys.base_prefix)"   # True внутри окружения

Выйти из окружения и удалить его

Bash
deactivate          # выйти из окружения
rm -rf .venv        # удалить папку; на Windows: rmdir /s /q .venv

Запуск без активации

Можно вызвать Python из окружения напрямую, например в скриптах и планировщиках:

Bash
.venv/bin/python app.py
.venv/bin/pip install -r requirements.txt

Что не добавлять в git

Папку окружения не коммитят: она зависит от системы и легко пересоздаётся. Добавьте в .gitignore:

Bash
echo ".venv/" >> .gitignore

Частые вопросы

Почему pip установил пакет не в окружение?

Скорее всего, окружение не активно, и pip относится к системному Python. Проверьте which pip и при необходимости вызывайте python -m pip install ...: это гарантирует нужный интерпретатор.

Чем venv отличается от virtualenv и conda?

venv входит в стандартную библиотеку и достаточен для большинства проектов. virtualenv работает быстрее и поддерживает больше версий, conda управляет ещё и нескольким версиями Python и нативными библиотеками.