Какие существуют инструменты для создания виртуальных окружений в Python

«Какие существуют инструменты для создания виртуальных окружений в Python» — вопрос из категории Devops, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Python для создания изолированных окружений используется несколько ключевых инструментов, каждый со своими особенностями.

Почему это важно? Виртуальные окружения позволяют управлять зависимостями для разных проектов, избегая конфликтов версий пакетов в глобальной установке Python.

Основные инструменты:

  1. venv

    • Описание: Стандартный, встроенный в Python (начиная с версии 3.3) модуль. Легковесный и не требует установки.
    • Идеально для: Простых проектов, где не нужно управлять разными версиями Python.
    • Пример:

      # Создание окружения
      python -m venv myenv
      
      # Активация (Linux/macOS)
      source myenv/bin/activate
      
      # Активация (Windows)
      .myenvScriptsactivate
  2. virtualenv

    • Описание: Сторонний пакет, предшественник venv. Более гибкий, быстрый и поддерживает старые версии Python (2.x).
    • Идеально для: Проектов, требующих поддержки устаревших версий Python.
  3. conda

    • Описание: Система управления пакетами и окружениями, популярная в Data Science. Управляет не только Python-пакетами, но и системными зависимостями (например, CUDA, MKL).
    • Идеально для: Научных вычислений, анализа данных и проектов со сложными не-Python зависимостями.
    • Пример:

      # Создание окружения с указанием версии Python
      conda create --name myenv python=3.9
      
      # Активация
      conda activate myenv
  4. Poetry и Pipenv

    • Описание: Современные инструменты высокого уровня, которые объединяют управление пакетами (через pyproject.toml или Pipfile) и виртуальными окружениями. Обеспечивают детерминированные сборки с помощью lock-файлов.
    • Идеально для: Разработки приложений, где важна строгая фиксация версий зависимостей и воспроизводимость окружения.