Ответ
Управление зависимостями в Python обеспечивает воспроизводимость окружения и предотвращает конфликты версий. Существует несколько подходов:
-
requirements.txt(стандартный подход) Простой текстовый файл, перечисляющий пакеты. Создается командойpip freeze > requirements.txt.- Плюсы: Простота, поддерживается всеми инструментами.
- Минусы: Не разделяет основные и dev-зависимости, не гарантирует детерминированную установку (установка
requests>=2.25.0сегодня и через год может дать разные результаты).
# requirements.txt flask==2.0.1 requests>=2.25.0 -
Pipenv (улучшенный подход) Сочетает управление пакетами (
Pipfile) и виртуальными окружениями. СоздаетPipfile.lockдля фиксации точных версий всех зависимостей, обеспечивая детерминированные сборки.- Плюсы: Автоматическое управление virtualenv, lock-файл.
- Минусы: Может быть медленнее других инструментов.
# Установить основную зависимость pipenv install flask # Установить dev-зависимость pipenv install --dev pytest -
Poetry (современный стандарт) Мощный инструмент, использующий
pyproject.tomlдля метаданных проекта и зависимостей. Генерируетpoetry.lockдля строгой фиксации версий.- Плюсы: Надежное разрешение зависимостей, удобное управление проектом и публикация пакетов, разделение зависимостей.
- Минусы: Более высокий порог входа для новичков.
# Добавить основную зависимость poetry add flask # Добавить dev-зависимость poetry add --dev pytest
Рекомендации:
- Для новых проектов: Используйте Poetry как наиболее надежный и функциональный инструмент.
- Для legacy или простых скриптов: Достаточно
requirements.txt, но обязательно фиксируйте версии с помощьюpip freeze. - Ключевая практика: Всегда используйте lock-файлы (
poetry.lock,Pipfile.lock) илиrequirements.txtс зафиксированными версиями (==) для обеспечения воспроизводимости сборок в CI/CD и на машинах других разработчиков.
Ответ 18+ 🔞
Слушай, а вот эта вся хуйня с зависимостями в питоне — это же просто пиздец какой-то цирк с конями, если честно. Сидишь такой, пишешь код, всё летает, а потом бац — коллега клонирует репу, и у него всё в говне. А почему? Потому что ты, мудак, не зафиксировал версию какой-нибудь библиотеки, а она за месяц обновилась и всё сломала. Вообще пиздец.
Ну ладно, давай по порядку, как с этим безобразием бороться.
1. requirements.txt — старый добрый распиздяйский метод.
Просто текстовый файл, куда пишешь, что тебе нужно. Создаёшь командой pip freeze > requirements.txt, и вуаля — там список всего, что у тебя установлено. Но тут, блядь, подвох: если ты написал requests>=2.25.0, то через полгода установится версия 3.0, которая может всё разъебать. А ты потом будешь чесать репу: «Ну оно же у меня работало!».
# requirements.txt
flask==2.0.1 # Вот так, с двумя равенствами — это надёжно, блядь
requests>=2.25.0 # А так — это игра в русскую рулетку, ёпта
- Плюсы: Проще некуда, все понимают.
- Минусы: Нет разделения на «для работы» и «для разработки», а версии могут уплыть, и потом охуеешь.
2. Pipenv — как будто умнее, но иногда тормозит как хуй в проруби.
Тут уже появляется Pipfile для зависимостей и Pipfile.lock, который фиксирует ВСЁ до последней запятой. Это уже серьёзнее.
# Ставим основную библиотеку
pipenv install flask
# А это только для разработки, например, тесты
pipenv install --dev pytest
- Плюсы: Сам создаёт виртуальное окружение, есть lock-файл — воспроизводимость на уровне.
- Минусы: Иногда такой медленный, что хочется ебать его в сраку и вернуться к старому доброму
pip.
3. Poetry — сейчас все охуели от него, и не зря.
Это, блядь, целый комбайн. Всё в одном файле pyproject.toml — и зависимости, и настройки проекта, и даже как пакет публиковать. И свой poetry.lock генерирует, конечно.
# Добавляем основную зависимость
poetry add flask
# А это — только для разработки
poetry add --dev pytest
- Плюсы: Очень надёжно решает зависимости, удобно управлять проектом, для публикации пакетов — вообще красота.
- Минусы: Новичок посмотрит на
pyproject.tomlи может охуеть, но это дело привычки.
Так что же выбрать, спросишь ты, мудя?
- Если проект новый и ты не конченый мазохист — бери Poetry. Это сейчас стандарт де-факто для чего-то серьёзного.
- Если у тебя скрипт на три строки или легаси-проект, который все боятся трогать — хватит и
requirements.txt. Но, блядь, обязательно фиксируй версии черезpip freeze, чтобы не было сюрпризов! - Главное правило, которое выжги себе на жопе: Используй lock-файлы (
poetry.lock,Pipfile.lock) илиrequirements.txtс жёстко зафиксированными версиями (==). Иначе твой CI/CD или коллега соберёт проект, и получится ебаный винегрет, а не рабочее приложение. Всё, вопрос закрыт.