Виртуальное окружение Python — venv, pip и requirements.txt

Зачем нужно виртуальное окружение

Виртуальное окружение — изолированная среда для Python-проекта со своим набором пакетов. Без него все пакеты ставятся глобально, и начинается хаос: один проект требует pandas 1.5, другой — pandas 2.0, и они конфликтуют. Знакомо?

Для аналитика это особенно актуально. У вас может быть Jupyter-тетрадка с ML-экспериментом на scikit-learn 1.2, ETL-скрипт на pandas 1.4, и дашборд на streamlit, который требует свежий numpy. Без виртуальных окружений это всё ломается.

На собеседованиях тему спрашивают нечасто, но знание venv и pip — базовый показатель технической грамотности. Если кандидат не понимает, зачем нужен requirements.txt, это сигнал.

venv — встроенный инструмент

С Python 3.3 виртуальные окружения встроены в стандартную библиотеку. Никаких дополнительных установок.

Создание

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

Это создаёт папку .venv с копией интерпретатора Python и чистым набором пакетов (только pip и setuptools).

Активация

# macOS / Linux
source .venv/bin/activate

# Windows (cmd)
.venv\Scripts\activate.bat

# Windows (PowerShell)
.venv\Scripts\Activate.ps1

После активации в командной строке появится (.venv) — вы внутри окружения. Все pip install теперь ставят пакеты только сюда.

Деактивация

deactivate

Проверка

# Где Python?
which python        # macOS/Linux
where python        # Windows

# Какие пакеты установлены?
pip list

pip — менеджер пакетов

pip — стандартный инструмент для установки пакетов из PyPI (Python Package Index).

Основные команды

# Установить пакет
pip install pandas

# Конкретная версия
pip install pandas==2.0.3

# Диапазон версий
pip install "pandas>=2.0,<2.1"

# Обновить
pip install --upgrade pandas

# Удалить
pip uninstall pandas

# Список установленных
pip list

# Показать информацию о пакете
pip show pandas

requirements.txt

Фиксирует все зависимости проекта — чтобы другой человек (или вы через полгода) мог воспроизвести окружение.

# Сохранить текущие пакеты
pip freeze > requirements.txt

# Установить из файла
pip install -r requirements.txt

Типичный requirements.txt для аналитического проекта:

pandas==2.0.3
numpy==1.25.2
scikit-learn==1.3.0
matplotlib==3.7.2
seaborn==0.12.2
jupyter==1.0.0
sqlalchemy==2.0.20

Совет: всегда фиксируйте версии. pandas без версии сегодня поставит 2.0.3, а через месяц — 2.1.0, и ваш код сломается. pip freeze делает это автоматически.

venv vs conda vs poetry

venv + pip conda poetry
Установка Встроен в Python Отдельно (Anaconda/Miniconda) pip install poetry
Пакеты PyPI conda-forge + PyPI PyPI
Lock-файл Нет (только freeze) environment.yml poetry.lock
Не-Python зависимости Нет Да (C-библиотеки) Нет
Лучше всего для Простые проекты, скрипты Data Science, ML Библиотеки, приложения

Для аналитика чаще всего достаточно venv + pip. Conda нужна, если вы работаете с пакетами, которые требуют C-компиляцию (некоторые версии scipy, xgboost на GPU) — conda ставит бинарники, а pip пытается компилировать.

conda: краткий обзор

# Создать окружение
conda create -n myenv python=3.11

# Активировать
conda activate myenv

# Установить пакет
conda install pandas

# Экспорт зависимостей
conda env export > environment.yml

# Воспроизвести окружение
conda env create -f environment.yml

Типичные проблемы и решения

«pip install не работает»

# Проблема: пакет ставится глобально
# Решение: проверьте, активировано ли окружение
which pip   # Должен указывать на .venv/bin/pip

# Если нет — активируйте:
source .venv/bin/activate

«ModuleNotFoundError после установки»

Обычно означает, что вы запускаете Python не из того окружения. В Jupyter нужно отдельно добавить ядро:

pip install ipykernel
python -m ipykernel install --user --name=myenv --display-name="My Project"

После этого в Jupyter выберите ядро «My Project».

«Конфликт версий»

# Посмотреть, что конфликтует
pip check

# Переустановить всё с нуля
pip install -r requirements.txt --force-reinstall

«requirements.txt раздулся»

pip freeze выводит все пакеты, включая зависимости зависимостей. Для чистого файла используйте pip-tools:

pip install pip-tools

# requirements.in — только прямые зависимости
echo "pandas\nscikit-learn\nmatplotlib" > requirements.in

# Компилирует полный requirements.txt с зафиксированными версиями
pip-compile requirements.in

Best practices для аналитических проектов

1. Одно окружение — один проект. Не используйте глобальный Python для работы. Даже для «быстрого скрипта» создайте venv.

2. .venv в .gitignore. Окружение не коммитится — оно воспроизводится из requirements.txt.

# .gitignore
.venv/
__pycache__/
*.pyc
.ipynb_checkpoints/

3. requirements.txt в репозитории. Коллега клонирует репо, запускает pip install -r requirements.txt — и всё работает.

4. Разделяйте dev и prod зависимости.

# requirements.txt — для продакшена
pandas==2.0.3
sqlalchemy==2.0.20

# requirements-dev.txt — для разработки
-r requirements.txt
jupyter==1.0.0
pytest==7.4.0
black==23.7.0

5. Обновляйте осознанно. Не запускайте pip install --upgrade на всё подряд. Обновляйте по одному пакету, проверяйте, что ничего не сломалось.

Структура аналитического проекта

my_analysis/
├── .venv/                  # Виртуальное окружение (в .gitignore)
├── data/
│   ├── raw/                # Сырые данные
│   └── processed/          # Обработанные данные
├── notebooks/
│   └── exploration.ipynb   # Jupyter-тетрадки
├── src/
│   ├── etl.py              # ETL-скрипты
│   └── metrics.py          # Функции для расчёта метрик
├── requirements.txt
├── requirements-dev.txt
├── .gitignore
└── README.md

Подробнее о Python для аналитика — в отдельной статье.

Вопросы с собеседований

Зачем нужно виртуальное окружение? — Изоляция зависимостей. Каждый проект живёт со своим набором пакетов и их версий. Без venv пакеты конфликтуют, код ломается, воспроизводимость нулевая.

Чем venv отличается от conda? — venv — встроен в Python, работает только с Python-пакетами из PyPI. conda — отдельный менеджер, умеет ставить не-Python зависимости (C-библиотеки, CUDA), использует свой репозиторий conda-forge.

Что такое requirements.txt и зачем нужен? — Файл с зафиксированными зависимостями проекта. Позволяет воспроизвести окружение одной командой: pip install -r requirements.txt. Создаётся через pip freeze.

Как передать проект коллеге, чтобы у него всё заработало? — Положить requirements.txt в репозиторий. Коллега делает: python -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt. Всё.

FAQ

Нужно ли коммитить папку .venv в git?

Нет, никогда. Окружение весит сотни мегабайт и привязано к ОС. Коммитьте requirements.txt — из него окружение пересоздаётся за 30 секунд.

Что лучше для Data Science — venv или conda?

Для большинства задач достаточно venv + pip. conda удобнее, если вы работаете с тяжёлыми ML-фреймворками (TensorFlow с GPU, некоторые версии PyTorch), которые требуют C/CUDA-библиотеки. Если всё ставится через pip без ошибок — conda не нужна.

Как перенести окружение на другой компьютер?

Не переносите папку .venv — она не портабельна. Сделайте pip freeze > requirements.txt на старой машине и pip install -r requirements.txt на новой. Для conda: conda env export > environment.yml и conda env create -f environment.yml.


Потренируйте вопросы по Python на реальных задачах — откройте тренажёр. 1500+ вопросов, которые спрашивают на собеседованиях аналитика. Бесплатно.