← Назад к вопросам

Что такое виртуальное окружение (virtual environment) и зачем оно нужно?

1.3 Junior🔥 291 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Виртуальное окружение (Virtual Environment)

Виртуальное окружение (venv) — это изолированная копия Python интерпретатора с собственным набором установленных пакетов. Это позволяет разным проектам использовать разные версии одних и тех же библиотек без конфликтов.

Проблема без виртуального окружения

Все пакеты устанавливаются в глобальную директорию Python:

$ python -m pip install django==3.2
# Установлена глобально в /usr/local/lib/python3.11/site-packages/

$ python -m pip install django==4.2
# Перезаписана на новую версию

# Теперь старый проект, использующий Django 3.2, сломан!

Проблемы:

  • Конфликты версий между проектами
  • Невозможно работать над несколькими проектами параллельно
  • Сложно понять, какие пакеты нужны конкретному проекту
  • Рискованно обновлять пакеты (может сломать другие проекты)
  • На сервере сложно развертывать (неизвестны зависимости)

Решение: Виртуальное окружение

Каждый проект получает собственную копию Python и пакетов:

Проект 1: Django 3.2                 Проект 2: Django 4.2
┌────────────────────────┐           ┌────────────────────────┐
│ venv1/                 │           │ venv2/                 │
│ ├── bin/               │           │ ├── bin/               │
│ ├── lib/               │           │ ├── lib/               │
│ │   site-packages/     │           │ │   site-packages/     │
│ │   ├── django==3.2    │           │ │   ├── django==4.2    │
│ │   └── ...            │           │ │   └── ...            │
│ └── pyvenv.cfg        │           │ └── pyvenv.cfg        │
└────────────────────────┘           └────────────────────────┘
     
     Изолированы друг от друга!

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

Способ 1: встроенный модуль venv (Python 3.3+)

# Создать виртуальное окружение в папке venv
python -m venv venv

# На Linux/Mac
source venv/bin/activate

# На Windows
venv\Scripts\activate

# Проверить, что активировано
(venv) $ python --version  # Префикс (venv) показывает активность

# Деактивировать
deactivate

Способ 2: pip-tools

# Создать venv
python -m venv venv
source venv/bin/activate

# Установить pip-tools
pip install pip-tools

Способ 3: Poetry (рекомендуется)

# Установить poetry
pip install poetry

# Создать новый проект
poetry new myproject
cd myproject

# Poetry автоматически создает venv
# Активировать
poetry shell

# Или запустить команды в venv
poetry run python script.py

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

venv/
├── bin/                          # (Linux/Mac)
│   ├── python                    # Копия Python интерпретатора
│   ├── pip                       # Менеджер пакетов
│   ├── pip3
│   ├── activate                  # Скрипт активации
│   └── ... другие команды
│
├── Scripts/                      # (Windows)
│   ├── python.exe
│   ├── pip.exe
│   ├── activate.bat
│   └── ...
│
├── lib/                          # (Linux/Mac)
│   └── python3.11/
│       └── site-packages/        # Установленные пакеты
│           ├── django/
│           ├── requests/
│           └── ...
│
├── Lib/                          # (Windows)
│   └── site-packages/
│       ├── django/
│       ├── requests/
│       └── ...
│
├── include/                      # Заголовочные файлы C
└── pyvenv.cfg                   # Конфигурация окружения

Практический пример

# Создать папку проекта
mkdir myapp
cd myapp

# Создать виртуальное окружение
python -m venv venv

# Активировать (Linux/Mac)
source venv/bin/activate
# Или (Windows)
# venv\Scripts\activate

# Теперь в терминале видно:
(venv) $ 

# Установить пакеты (они идут в venv, не в систему)
pip install django requests

# Проверить установленные пакеты
pip list
# django 4.2.0
# requests 2.31.0

# Сохранить зависимости в файл
pip freeze > requirements.txt

# Содержимое requirements.txt:
# django==4.2.0
# requests==2.31.0
# ...

# Вышли из venv
deactivate

# Теперь (venv) исчезает
$ 

# Если нужно на другом компьютере восстановить окружение
cd myapp
source venv/bin/activate
pip install -r requirements.txt

Пример: Конфликт версий решен с venv

Проект 1: требует Django 3.2

cd project1
source venv1/bin/activate
pip install django==3.2
pip freeze > requirements.txt
# django==3.2.0
deactivate

Проект 2: требует Django 4.2

cd project2
source venv2/bin/activate
pip install django==4.2
pip freeze > requirements.txt
# django==4.2.0
deactivate

Обе версии работают одновременно:

# Проект 1
cd project1
source venv1/bin/activate
python manage.py runserver
# Django 3.2 работает

# В другом терминале
cd project2
source venv2/bin/activate
python manage.py runserver
# Django 4.2 работает

# Конфликтов нет!

Современный подход: Poetry и pyproject.toml

# pyproject.toml
[tool.poetry]
name = "myapp"
version = "0.1.0"
description = "My awesome app"
authors = ["Your Name"]

[tool.poetry.dependencies]
python = "^3.11"
django = "^4.2"
requests = "^2.31"
pydantic = "^2.0"

[tool.poetry.dev-dependencies]
pytest = "^7.0"
black = "^23.0"
ruff = "^0.1"
# Poetry автоматически создает venv
poetry install

# Запустить в venv
poetry run python manage.py runserver
poetry run pytest

# Или активировать shell
poetry shell
python manage.py runserver
pytest

Почему это важно?

1. Изоляция зависимостей

  • Каждый проект имеет свои версии
  • Обновление в одном проекте не влияет на другой

2. Воспроизводимость

  • Можно клонировать проект на другом компьютере
  • Установить точно такие же версии (pip freeze)
  • Гарантирована совместимость

3. Безопасность

  • Разработка не трогает системный Python
  • Система остается стабильной
  • Можно удалить venv без последствий

4. Простота работы

  • Легко добавлять/удалять пакеты
  • Легко обновлять версии
  • Четко видна зависимость каждого проекта

5. Deployment

  • На сервере развертываем точно то же окружение
  • Docker контейнер гарантирует идентичность
  • Предсказуемое поведение в production

Лучшие практики

1. Всегда используй venv для проектов

python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

2. Добавь venv в .gitignore

# .gitignore
venv/
.venv/
env/

3. Используй requirements.txt или pyproject.toml

pip freeze > requirements.txt
# или
poetry export -f requirements.txt --output requirements.txt

4. Документируй процесс

# Installation

1. Create virtual environment:
   python -m venv venv

2. Activate:
   source venv/bin/activate  # Linux/Mac
   venv\\Scripts\\activate   # Windows

3. Install dependencies:
   pip install -r requirements.txt

4. Run:
   python app.py

5. Для современных проектов используй Poetry

poetry init
poetry add django requests
poetry run pytest

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

Используй для:

  • Любого Python проекта (кроме системных скриптов)
  • Веб-приложений (Flask, Django, FastAPI)
  • Data Science проектов (numpy, pandas, scikit-learn)
  • Библиотек и пакетов
  • Production серверов (в Docker)

Не используй для:

  • Системных скриптов (обычно не надо)
  • Одноразовых скриптов (можно обойтись)

Заключение

Виртуальное окружение — это critical best practice в Python разработке. Оно:

  • Изолирует зависимости проектов
  • Гарантирует воспроизводимость
  • Упрощает управление версиями
  • Обязательно для production deployment

Внедрить в привычку создавать venv при старте нового проекта — это основа профессиональной разработки на Python.

Что такое виртуальное окружение (virtual environment) и зачем оно нужно? | PrepBro