Virtual Environment в Python — зачем нужен и как использовать

Virtual Environment

Python — один из самых популярных языков программирования, но у новичков часто возникает проблема: установил одну библиотеку для проекта, а она «сломала» другой проект. Или одна программа требует старую версию пакета, а другая — новую.

Именно для решения этой проблемы существуют virtual environment (виртуальные окружения).


Что такое Virtual Environment

Virtual Environment (виртуальное окружение) — это изолированная среда Python для отдельного проекта.

Проще говоря:

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

Без виртуального окружения все библиотеки устанавливаются глобально в систему. Со временем начинается хаос:

  • несовместимые версии;
  • ошибки зависимостей;
  • проблемы после обновлений;
  • «у меня работало вчера».

Virtual environment решает это.


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

Когда создается виртуальное окружение, Python делает отдельную папку со своей структурой:

project/
│
├── venv/
│   ├── Scripts/
│   ├── Lib/
│   └── ...
│
├── main.py
└── requirements.txt

Внутри:

  • собственный Python-интерпретатор;
  • собственный pip;
  • собственные библиотеки.

То есть проект использует пакеты только из своего окружения.


Зачем это нужно

1. Изоляция проектов

Например:

Проект №1

Требует:

Django 3.2

Проект №2

Требует:

Django 5.0

Без virtual environment они конфликтуют.

С virtual environment оба проекта работают независимо.


2. Чистая система

Без venv Python быстро превращается в «свалку» библиотек:

pip install ...
pip install ...
pip install ...

Через год уже невозможно понять:

  • что нужно;
  • что не нужно;
  • что используется.

3. Удобная передача проекта

Можно сохранить зависимости:

pip freeze > requirements.txt

И другой человек установит всё одной командой:

pip install -r requirements.txt

Встроенный модуль venv

Начиная с Python 3, виртуальные окружения входят в стандартную поставку.

Модуль называется:

venv

Это официальный способ создания окружений.


Как создать virtual environment

Windows

Перейдите в папку проекта:

cd myproject

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

python -m venv venv

Linux / macOS

python3 -m venv venv

Что означает эта команда

python -m

Запустить модуль Python.


venv

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


venv

Название папки окружения.

Можно назвать как угодно:

python -m venv env
python -m venv .venv
python -m venv project_env

Но чаще используют:

venv

или

.venv

Как активировать virtual environment

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


Windows CMD

venv\Scripts\activate

Windows PowerShell

.\venv\Scripts\Activate.ps1

Linux / macOS

source venv/bin/activate

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

В терминале появится префикс:

(venv)

Например:

(venv) C:\Projects\myapp>

Это значит:

  • используется локальный Python;
  • pip работает внутри окружения;
  • библиотеки ставятся только в этот проект.

Установка библиотек внутри окружения

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

pip install requests

Пакет установится только в этот проект.


Проверка установленных библиотек

pip list

Сохранение зависимостей

Очень важная команда:

pip freeze > requirements.txt

Она сохраняет все библиотеки и версии.

Пример:

requests==2.32.0
numpy==2.1.1
flask==3.0.2

Установка зависимостей из файла

pip install -r requirements.txt

Это особенно важно:

  • для командной разработки;
  • серверов;
  • Docker;
  • GitHub-проектов.

Как отключить окружение

deactivate

После этого терминал вернется к системному Python.


Нужно ли добавлять venv в Git

Обычно — нет.

В .gitignore добавляют:

venv/

или

.venv/

Потому что окружение:

  • большое;
  • генерируется автоматически;
  • зависит от ОС.

В репозиторий обычно кладут только:

requirements.txt

Где хранить virtual environment

Есть несколько подходов.


Внутри проекта

project/venv

Плюсы:

  • удобно;
  • просто;
  • VS Code автоматически находит.

Минусы:

  • занимает место внутри проекта.

Отдельно от проекта

C:\venvs\project1

Плюсы:

  • чище структура.

Минусы:

  • менее удобно новичкам.

Virtualenv vs venv

Раньше был популярен пакет:

virtualenv

Сейчас чаще используют встроенный:

venv

Отличия

venv

  • встроен в Python;
  • официальный;
  • проще.

virtualenv

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

Для большинства задач достаточно venv.


Poetry — современный подход

Сегодня многие используют Poetry.

Он автоматически:

  • создаёт virtual environment;
  • управляет зависимостями;
  • ведёт lock-файл;
  • упрощает публикацию пакетов.

Официальный сайт: Poetry


Pipenv

Ещё один популярный инструмент — Pipenv.

Комбинирует:

  • pip;
  • virtualenv;
  • управление зависимостями.

Официальный сайт: Pipenv


VS Code и virtual environment

Visual Studio Code обычно автоматически предлагает выбрать виртуальное окружение.

Если нет:

Ctrl + Shift + P

Введите:

Python: Select Interpreter

И выберите:

./venv

Частые ошибки

1. pip ставит библиотеки не туда

Проверьте:

where python
where pip

Linux/macOS:

which python
which pip

2. Окружение не активируется в PowerShell

Разрешите выполнение скриптов:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

3. Забыл активировать venv

Очень частая ошибка.

Смотрите на префикс:

(venv)

Полезные команды

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

python -m venv venv

Активировать

Windows

venv\Scripts\activate

Linux/macOS

source venv/bin/activate

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

pip install requests

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

pip freeze > requirements.txt

Установить зависимости

pip install -r requirements.txt

Отключить окружение

deactivate

Итоги

Virtual environment — обязательный инструмент для Python-разработки.

Он позволяет:

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

Сегодня использование virtual environment считается стандартом практически в любом Python-проекте — от маленьких скриптов до крупных AI-систем и веб-приложений.

Leave a Reply

Your email address will not be published. Required fields are marked *