Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Виртуальные окружения в Python: выбор инструмента
Виртуальное окружение — это изолированная среда Python с собственным набором пакетов, независимая от глобальной установки. Это критично для управления зависимостями, избежания конфликтов версий и обеспечения воспроизводимости проекта.
1. venv (встроенный модуль Python)
Официальный инструмент, поставляется с Python 3.3+:
# Создание окружения
python3 -m venv myenv
# Активация
source myenv/bin/activate # Linux/macOS
myenv\Scripts\activate # Windows
# Проверка
which python # Должен указать на myenv/bin/python
# Деактивация
deactivate
# Установка пакетов
# pip install flask==2.3.0 requests pandas
# Сохранение зависимостей
# pip freeze > requirements.txt
# Установка из файла
# pip install -r requirements.txt
Плюсы:
- Встроен в Python, нет доп. установок
- Простой API
- Легко воспроизвести в CI/CD
- Стандарт де-факто
Минусы:
- Нет встроенного управления версиями Python
- Медленнее других инструментов
- Требует手ручного управления requirements.txt
2. Poetry
Современный инструмент с полным управлением зависимостями и версионированием:
# Установка
curl -sSL https://install.python-poetry.org | python3 -
# Создание нового проекта
poetry new myproject
cd myproject
# Инициализация в существующем проекте
poetry init
# Создание окружения (автоматически)
poetry install
# Добавление зависимости
poetry add flask requests
poetry add pytest --group dev # Группа зависимостей
# Удаление
poetry remove flask
# Активация окружения
poetry shell
# Запуск скрипта без активации
poetry run python script.py
pyproject.toml:
[tool.poetry]
name = "myproject"
version = "0.1.0"
description = "My awesome project"
authors = ["John Doe <john@example.com>"]
[tool.poetry.dependencies]
python = "^3.10"
flask = "^2.3.0"
requests = "*"
[tool.poetry.group.dev.dependencies]
pytest = "^7.0"
pytest-cov = "^4.0"
black = "^23.0"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
Плюсы:
- Детерминированное управление версиями (poetry.lock)
- Встроенная поддержка групп зависимостей
- Простое создание пакетов и публикация на PyPI
- Управление версиями Python
- Красивый UI
Минусы:
- Требует установки
- Медленнее на больших проектах
- Кривая обучения
3. pipenv
Комбинирует pip и virtualenv с lock-файлом:
# Установка
pip install pipenv
# Создание окружения
pipenv --python 3.10
# Установка зависимостей
pipenv install flask requests
pipenv install --dev pytest black
# Активация
pipenv shell
# Запуск без активации
pipenv run python script.py
# Синхронизация с Pipfile.lock
pipenv sync
Pipfile:
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
flask = "==2.3.0"
requests = "*"
[dev-packages]
pytest = "*"
black = "*"
[requires]
python_version = "3.10"
Плюсы:
- Lock-файл для воспроизводимости
- Группы зависимостей
- Простой API
Минусы:
- Развитие замедлилось
- Медленнее Poetry и uv
- Меньше функций
4. uv (новейший инструмент)
Сверхбыстрый менеджер пакетов на Rust, созданный авторами Ruff:
# Установка
curl -LsSf https://astral.sh/uv/install.sh | sh
# Создание проекта
uv init myproject
cd myproject
# Создание окружения
uv venv
# Активация
source .venv/bin/activate
# Установка зависимостей
uv pip install flask requests
# Синхронизация с requirements.txt
uv pip compile requirements.in -o requirements.txt
uv pip sync requirements.txt
# Или используй pyproject.toml как Poetry
uv sync
Плюсы:
- Сверхбыстрая установка (Rust)
- Простой API
- Растущая популярность
- Совместимость с pip
Минусы:
- Молодой проект
- Меньше экосистемы
- Документация развивается
5. Conda
Для science-задач и сложных зависимостей C/C++:
# Создание окружения
conda create --name myenv python=3.10
# Активация
conda activate myenv
# Установка
conda install -c conda-forge numpy pandas scipy
# Export
conda env export > environment.yml
# Recreate
conda env create -f environment.yml
Плюсы:
- Лучше для science (NumPy, Pandas, TensorFlow)
- Управление C зависимостями
- Изолирует не только Python пакеты
Минусы:
- Не идеален для чистого Python
- Тяжелый (несколько ГБ)
- Медленнее других
Мой выбор как опытного разработчика
Для production проектов: Poetry
- Воспроизводимость через poetry.lock
- Группы зависимостей (dev, test, docs)
- Встроенное управление версиями Python
- Легко публиковать пакеты
Для быстрого прототипирования: uv
- Невероятная скорость
- Простой синтаксис
- Актуально в 2025 году
Для личных проектов: venv
- Встроен, нет завишостей
- Просто и понятно
- requirements.txt для простоты
Для scientific computing: Conda
- NumPy, Pandas интегрируются лучше
- Управление BLAS/LAPACK
- Jupyter notebooks эко-система
Правильная практика: воспроизводимость
# ✅ Хорошо (Poetry)
poetry install # Устанавливает точно как в poetry.lock
poetry run pytest # Тесты в правильном окружении
# ✅ Хорошо (venv + requirements)
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pytest
# ❌ Плохо
pip install flask # Глобально, конфликты версий
python script.py # Зависит от окружения
# ❌ Плохо
# Коммитить venv в git
CI/CD интеграция
# GitHub Actions с Poetry
name: CI
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.11
cache: poetry
- run: pip install poetry
- run: poetry install
- run: poetry run pytest
- run: poetry run black --check .
Вывод: Выбор инструмента зависит от типа проекта. Для современной разработки рекомендую Poetry (надёжность) или uv (скорость). venv остаётся отличным выбором для простоты.