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

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

1.2 Junior🔥 151 комментариев
#Python Core

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

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

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

Виртуальные окружения в 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 остаётся отличным выбором для простоты.

Какое виртуальное окружение используешь? | PrepBro