Python venv: как создать и активировать виртуальное окружение
Виртуальное окружение создаёт отдельную копию Python со своими пакетами для каждого проекта. Создайте его командой python -m venv .venv, активируйте source .venv/bin/activate на Linux и macOS или .venv\Scripts\activate на Windows.
Создать окружение
python -m venv .venvКоманда создаёт папку .venv в текущем каталоге. На Linux и macOS вместо python может понадобиться python3. Название папки может быть любым, .venv и venv самые распространённые.
Активировать окружение
Система | Команда |
|---|---|
Linux, macOS (bash, zsh) |
|
Windows, PowerShell |
|
Windows, командная строка |
|
После активации в начале строки появится (.venv). Команды python и pip теперь относятся к окружению.
Установить пакеты и сохранить список
pip install requests
pip freeze > requirements.txt # записать установленные версии
pip install -r requirements.txt # установить всё из файла на другой машинеПроверить, что вы внутри окружения
which python # Linux, macOS: путь должен вести в .venv
python -c "import sys; print(sys.prefix != sys.base_prefix)" # True внутри окруженияВыйти из окружения и удалить его
deactivate # выйти из окружения
rm -rf .venv # удалить папку; на Windows: rmdir /s /q .venvЗапуск без активации
Можно вызвать Python из окружения напрямую, например в скриптах и планировщиках:
.venv/bin/python app.py
.venv/bin/pip install -r requirements.txtЧто не добавлять в git
Папку окружения не коммитят: она зависит от системы и легко пересоздаётся. Добавьте в .gitignore:
echo ".venv/" >> .gitignoreЧастые вопросы
Почему pip установил пакет не в окружение?
Скорее всего, окружение не активно, и pip относится к системному Python. Проверьте which pip и при необходимости вызывайте python -m pip install ...: это гарантирует нужный интерпретатор.
Чем venv отличается от virtualenv и conda?
venv входит в стандартную библиотеку и достаточен для большинства проектов. virtualenv работает быстрее и поддерживает больше версий, conda управляет ещё и нескольким версиями Python и нативными библиотеками.