Виртуальное окружение 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 listpip — менеджер пакетов
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 pandasrequirements.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.inBest 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.05. Обновляйте осознанно. Не запускайте 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+ вопросов, которые спрашивают на собеседованиях аналитика. Бесплатно.