С какими пакетными менеджерами вы работали в Python?

Ответ

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

  • pip: Стандартный и наиболее распространенный менеджер для установки пакетов из PyPI. Идеален для простых проектов и управления зависимостями через requirements.txt.

    # Установка пакета
    pip install requests
    
    # Сохранение текущих зависимостей в файл
    pip freeze > requirements.txt
  • pipenv: Инструмент, который объединяет управление зависимостями и виртуальными окружениями. Он создает Pipfile и Pipfile.lock для детерминированных сборок, обеспечивая воспроизводимость окружения.
  • Poetry: Современный инструмент для управления зависимостями, виртуальными окружениями и публикацией пакетов. Он использует файл pyproject.toml и предлагает более строгий подход к разрешению зависимостей.

    # Добавление новой зависимости
    poetry add pandas
    
    # Сборка пакета для дистрибуции
    poetry build
  • Conda: Кроссплатформенный менеджер окружений и пакетов, особенно ценный в Data Science для управления не только Python-пакетами, но и системными библиотеками (например, CUDA, MKL).

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

Ответ 18+ 🔞

А, ну это ж классика, блядь! Сидишь такой, новый проект заводишь, а тут на тебя, сука, целый зоопарк этих менеджеров вываливается. Как будто в магазин за хлебом пришёл, а тебе: «А вы, сука, будете нарезной батон, или чиабатту, или, может, бородинский в пивном тесте? Выбирай, пидор, но быстро!»

Ну ладно, разберёмся, блядь, по полочкам, а то голова пухнет.

pip — это наш старый, блядь, добрый дед. Простой как три копейки. Хочешь поставить какую-нибудь библиотеку? Написал в консоль — и через минуту уже импортируешь. Всё гениальное, ёпта, просто. Зависимости свои в requirements.txt скинул — и спи спокойно. Правда, иногда он такие версии пакетов натянет, что потом полдня разгребаешь, почему всё сломалось. Но для мелких скриптов или когда по-быстрому надо — идеально.

# Поставил себе requests и сидишь API дергаешь, как бог
pip install requests

# А это, блядь, священный ритуал — заморозить зависимости, чтобы потом не орать «а у меня на машине работало!»
pip freeze > requirements.txt

Дальше идёт pipenv. Это уже, блядь, для тех, кто любит порядок. Он тебе и виртуальное окружение само создаст, и зависимости в Pipfile аккуратненько разложит, а ещё Pipfile.lock сделает — этакую, сука, фотографию твоего идеального мира на конкретный момент. Чтобы через полгода, когда коллега проект разворачивает, у него не вылезло тридцать семь несовместимых версий. Удобно, чо.

А вот Poetry — это уже, блядь, не просто менеджер, а целая философия. Для серьёзных пацанов, которые свои пакеты пилят и публикуют. Всё у него через pyproject.toml, всё строго, красиво. Зависимости разрешает так, что мама не горюй — если конфликт, то сразу скажет, а не будет тихо подсовывать первую попавшуюся версию, из-за которой потом пиздец.

# Добавил pandas — и он сам всё проставил, версию подобрал, зависимости проверил. Красота.
poetry add pandas

# А когда свой пакет запилил — одной командой собрал, как конфетку.
poetry build

И наконец, царь зверей для дата-саентистов — Conda. Это когда тебе мало просто питоновских библиотек, а надо ещё, чтобы какая-нибудь ебучая CUDA-драйвер стояла определённой версии, или математические библиотеки специфические. Conda, сука, за тебя и питон поставит, и все эти нативные штуки, с которыми pip обычно обоссывается. Незаменимая вещь, когда работаешь не в вакууме, а в реальном, ёбнутом мире, полном системных зависимостей.

Короче, выбор, блядь, простой:

  • Быстро и простоpip, и не еби мозг.
  • Чтоб надёжно и воспроизводимо для проекта — pipenv или Poetry.
  • А если у тебя там нейросети, или научные расчёты, или просто адский зоопарк из не-питоновского говна — тогда, друг мой, тебе прямая дорога к Conda.

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