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

Python Автор: Среда и версия: Python 3; venv; Linux, macOS и Windows

Два Python-проекта могут требовать разные версии одной библиотеки. Если устанавливать всё в системный Python, обновление для одного проекта способно сломать другой. Виртуальное окружение решает эту проблему: у каждого проекта появляется свой набор пакетов.

Минимальный рабочий цикл состоит из четырёх команд:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install requests
python main.py

На Windows команды отличаются. Ниже разберём оба варианта и проверим, что пакеты действительно устанавливаются в нужное окружение.

Что создаёт venv

venv — модуль из стандартной библиотеки Python. Дополнительно устанавливать его через pip не нужно.

После команды:

python3 -m venv .venv

рядом с кодом появится каталог .venv. Внутри находятся:

  • исполняемый файл Python;
  • каталог для установленных пакетов;
  • программа pip;
  • скрипты активации для разных оболочек;
  • файл pyvenv.cfg с настройками окружения.

Это не виртуальная машина и не контейнер. .venv — обычный каталог, связанный с той версией Python, которой его создали.

Название можно выбрать любое, но .venv стало распространённым соглашением. По нему редакторы кода обычно сами находят окружение проекта.

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

Откройте терминал в каталоге проекта.

На Linux и macOS:

python3 -m venv .venv

На Windows:

py -m venv .venv

Последний аргумент задаёт каталог окружения. Если назвать его backend-env, все файлы окажутся в backend-env. Для большинства проектов достаточно .venv.

Если команда завершилась без вывода, окружение создано. Проверить каталог можно через файловый менеджер или терминал:

ls -la

На Windows:

Get-ChildItem -Force

Как активировать venv

Активация добавляет каталог окружения в PATH. После этого команда python запускает интерпретатор из .venv, а pip устанавливает пакеты туда же.

Для bash и zsh на Linux или macOS:

source .venv/bin/activate

Для PowerShell:

.\.venv\Scripts\Activate.ps1

Для командной строки Windows:

.venv\Scripts\activate.bat

После активации в начале строки терминала обычно появляется имя окружения:

(.venv) user@computer project %

Надпись удобна, но надёжнее проверить путь к интерпретатору:

python -c "import sys; print(sys.executable)"

В результате должен быть путь с .venv. Например:

/home/user/project/.venv/bin/python

или:

C:\Users\User\project\.venv\Scripts\python.exe

Как установить пакет внутрь окружения

После активации установим библиотеку requests:

python -m pip install requests

Форма python -m pip длиннее обычного pip install, зато явно связывает pip с текущим интерпретатором Python. Это помогает избежать ситуации, когда python взят из окружения, а pip — из системы.

Проверим установку:

python -c "import requests; print(requests.__version__)"

Пакет доступен только внутри этого окружения. После перехода в другой проект его придётся установить в окружение того проекта.

Как сохранить зависимости

Сам каталог .venv не передают другим разработчикам. Вместо него сохраняют список пакетов:

python -m pip freeze > requirements.txt

В файле появятся имена установленных пакетов и их версии. На другом компьютере окружение создают заново, затем устанавливают зависимости из этого списка:

python -m pip install -r requirements.txt

Для небольшого учебного проекта этого достаточно. В большом приложении зависимости обычно ведут через pyproject.toml и фиксируют отдельным lock-файлом, но это уже задача системы сборки, а не venv.

Если хочется управлять окружением, версией Python и lock-файлом одной программой, смотри практическое руководство по uv. Там же разобран безопасный перенос существующего requirements.txt.

Почему .venv не добавляют в Git

Виртуальное окружение может занимать сотни мегабайт и содержать файлы, зависящие от операционной системы и расположения проекта. Перенос готового каталога между компьютерами ненадёжен.

Добавьте окружение в .gitignore:

.venv/

В репозитории должны остаться код проекта и описание зависимостей. Саму .venv всегда можно создать заново.

Не путайте .venv и .env. В .venv лежат Python и пакеты. В .env обычно хранят переменные окружения: токены, адреса сервисов и локальные настройки. Файл .env с секретами тоже не добавляют в Git, но это другой файл с другой задачей.

Как выйти из окружения

Выполните:

deactivate

Команда уберёт .venv из PATH текущего терминала. Каталог и установленные пакеты останутся на месте.

Закрытие терминала тоже завершает активацию. После открытия нового окна окружение нужно активировать снова, но создавать заново не требуется.

Можно ли работать без активации

Да. Активация только сокращает команды. Интерпретатор из окружения можно вызвать напрямую.

На Linux и macOS:

.venv/bin/python main.py
.venv/bin/python -m pip install requests

На Windows:

.\.venv\Scripts\python.exe main.py
.\.venv\Scripts\python.exe -m pip install requests

Этот способ пригодится в скриптах запуска и при ограничениях PowerShell: он не меняет настройки оболочки и не требует запуска Activate.ps1.

Почему пакет не импортируется

Чаще всего пакет установили не тем интерпретатором. Сначала проверьте путь:

python -c "import sys; print(sys.executable)"

Затем проверьте, где pip видит пакеты:

python -m pip --version

Если pip install requests введён после приглашения >>>, Python ответит SyntaxError: invalid syntax: это команда терминала, а не Python-код. Как выйти в нужный терминал и прочитать остальные части сообщения, разобрано в статье про SyntaxError.

Оба пути должны содержать .venv. Если один из них ведёт в системный каталог, активируйте окружение заново или вызывайте .venv/bin/python напрямую.

В редакторе кода тоже нужно выбрать интерпретатор из .venv. Активация в отдельном терминале не всегда меняет настройки уже открытого редактора.

Когда окружение нужно пересоздать

Пересоздайте .venv, если:

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

Удалите каталог .venv, создайте его той версией Python, на которой должен работать проект, и установите зависимости из requirements.txt.

Окружение намеренно устроено как расходный материал. Код и список зависимостей важны, а .venv всегда восстанавливается из них.

Следующий практический шаг — запустить проект со сторонней библиотекой. В инструкции по Telegram-боту окружение отделит зависимости бота от остальных Python-проектов на компьютере.

Источники