Как управлять виртуальными окружениями и зависимостями в Python?

Ответ

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

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

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

  1. venv (стандартный модуль Python):

    • Описание: Легковесный, встроенный в Python 3.x инструмент для создания виртуальных окружений.
    • Пример использования:

      # Создание виртуального окружения 'myenv'
      python -m venv myenv
      
      # Активация окружения (Linux/macOS)
      source myenv/bin/activate
      
      # Активация окружения (Windows PowerShell)
      .myenvScriptsActivate.ps1
      
      # Активация окружения (Windows Cmd)
      myenvScriptsactivate.bat
      
      # Установка пакетов
      pip install requests
      
      # Деактивация
      deactivate
  2. conda (для Anaconda/Miniconda):

    • Описание: Менеджер пакетов и окружений, особенно популярен в области анализа данных и научных вычислений. Поддерживает не только Python-пакеты, но и библиотеки на других языках.
  3. pipenv и poetry (инструменты управления зависимостями):

    • Описание: Эти инструменты объединяют управление виртуальными окружениями с более продвинутым управлением зависимостями, включая блокировку версий (Pipfile.lock или poetry.lock) и автоматическое создание/активацию окружений.
    • Пример с poetry:

      # Инициализация нового проекта с poetry
      poetry init
      
      # Добавление пакета (автоматически создает venv, если нет)
      poetry add requests
      
      # Запуск команды в контексте окружения
      poetry run python my_script.py
      
      # Установка всех зависимостей из poetry.lock
      poetry install
  4. Docker (для контейнеризации):

    • Описание: Предоставляет полную изоляцию среды на уровне операционной системы. Используется для создания воспроизводимых, переносимых окружений, которые включают не только Python и его зависимости, но и все системные библиотеки.
    • Применение: Создание Dockerfile для определения среды и docker-compose.yml для оркестрации нескольких сервисов.

Выбор инструмента: Выбор зависит от сложности проекта, требований к изоляции и предпочтений команды. Для большинства Python-проектов venv в сочетании с pip достаточен, но для более сложных сценариев poetry или Docker предлагают значительные преимущества.

Ответ 18+ 🔞

Давай я тебе на пальцах объясню, про эти ваши виртуальные окружения, а то народ безмозглый, блядь, безмозглый в пизду! Сидят, сука, пакеты в глобал сыплют, а потом орут: "Ой, у меня всё сломалось, ёпта!".

А нахуя это вообще надо, спросишь ты? А затем, чувак, чтобы у каждого твоего говнопроекта был свой отдельный мирок, своя песочница, блядь. Чтобы библиотеки от одного проекта не наебали другой. Представь, один проект требует старую версию какой-нибудь хуйни, а другой — новую. И что, сука, делать? Правильно, изолировать их, как прокажённых, нахуй!

Чем этим добром пользоваться?

  1. venv — стандартный, как три рубля. Это как базовый набор выживальщика, встроен в сам Python. Ничего лишнего, но работает.

    # Создаёшь себе такую вот избушку на курьих ножках, называется 'myenv'
    python -m venv myenv
    
    # Теперь в неё надо залезть. На Линуксе/Маке:
    source myenv/bin/activate
    # На Винде (PowerShell):
    .myenvScriptsActivate.ps1
    # На Винде (старая консоль):
    myenvScriptsactivate.bat
    
    # Всё, ты в домике! Теперь ставишь что хочешь, и это останется тут.
    pip install requests
    pip install flask==2.1.0  # Вот так вот конкретную версию, чтобы не выёбывалась
    
    # Наигрался? Выходи нахуй.
    deactivate

    Просто, как три копейки, блядь. Но иногда хочется больше контроля, и тут на сцену выходят...

  2. conda — для учёных и дата-сайентистов. Это уже не просто песочница, это, блядь, целый научный городок. Умеет ставить не только питонячьи пакеты, но и всякие нативные библиотеки, которые обычно голыми руками не соберёшь. Хулиганский инструмент, но для своих задач — овердохуища удобный.

  3. poetry / pipenv — для красоты и порядка. Это уже не просто изоляция, это, сука, высший пилотаж управления зависимостями. Они тебе и виртуальное окружение сами создадут, и версии пакетов зафиксируют в специальном файле-замке (poetry.lock), чтобы завтра всё не разъехалось к ебеням. Смотри, как poetry делает красиво:

    # Создаём новый проект. Он тебе вопросы задаст, а ты не дури.
    poetry init
    
    # Говоришь: "Хочу requests!" — и он сам создаст окружение (если нет) и поставит.
    poetry add requests
    
    # Запускаешь скрипт в контексте этого окружения, не парясь.
    poetry run python my_script.py
    
    # Скачал проект с гита? Одна команда — и все зависимости как у автора встали.
    poetry install

    Это, блядь, почти магия. Чувствуешь разницу? Не надо вручную активировать, деактивировать — он сам всё понимает, хитрая жопа.

  4. Docker — тяжёлая артиллерия, когда надо накрыть всё медным тазом. А это что? А это когда тебе мало изолировать питон, а надо изолировать ВСЁ: версию операционки, системные библиотеки, порты, службы — да хуй знает что ещё! Создаёшь Dockerfile, пишешь там инструкции, и получаешь контейнер — этакую банку, в которой твой проект будет работать ВСЕГДА и ВЕЗДЕ одинаково. Мощно, блядь, но и сложнее. Для больших, серьёзных сервисов — самое то.

Так что же выбрать, ёпта? Да похуй, на самом деле. Начинай с venv, он всегда под рукой. Если проект растёт и зависимостей становится, как говна за баней, — бери poetry, он порядок наведёт. Копаешься в данных? conda тебе в помощь. А если делаешь что-то монструозное, что должно бегать у клиента в продакшене, — учи Docker, без вариантов.

Главное — не делай как последний мудак, не лей всё в одну кучу. Изолируй проекты, и будет тебе счастье, а не внезапный пиздец посреди рабочего дня. В рот меня чих-пых, казалось бы, элементарно!