Как зафиксировать зависимости Python-проекта с помощью pip?

Ответ

Стандартный способ зафиксировать зависимости Python-проекта — использовать файл requirements.txt. Это позволяет создавать воспроизводимые окружения на других машинах или в CI/CD.

Процесс состоит из двух шагов:

1. Фиксация зависимостей (создание файла)

Чтобы сохранить все пакеты, установленные в вашем текущем виртуальном окружении, и их точные версии, выполните команду:

pip freeze > requirements.txt

Эта команда создаст файл requirements.txt в текущей директории.

Пример содержимого requirements.txt:

Django==4.2.7
psycopg2-binary==2.9.9
requests==2.31.0

2. Установка зависимостей из файла

Чтобы установить все пакеты, перечисленные в файле, на другой машине или в новом окружении, используется команда:

pip install -r requirements.txt

Лучшие практики:

  • Используйте виртуальные окружения (venv). Это ключевой инструмент для изоляции зависимостей каждого проекта и избежания конфликтов версий. Всегда активируйте окружение перед работой с pip.

    # Создание окружения
    python -m venv .venv
    # Активация (Linux/macOS)
    source .venv/bin/activate
  • Разделяйте зависимости. Для больших проектов часто создают несколько файлов: requirements.txt для продакшена и dev-requirements.txt для инструментов разработки (например, pytest, black, flake8).

  • Рассмотрите pip-tools. Для более продвинутого управления зависимостями pip-tools позволяет поддерживать файл requirements.in с основными зависимостями, а requirements.txt генерировать автоматически, включая все вложенные зависимости.

Ответ 18+ 🔞

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

В общем, стандартный способ, чтобы твой проект не разъехался по швам на другом компе — это файлик requirements.txt. Суть проще пареной репы: ты в нём пишешь, какие библиотеки и в каких версиях нужны, чтобы всё не накрылось медным тазом.

Процесс, блядь, из двух действий, как вкрутить лампочку, только проще.

1. Зафиксировать зависимости (сделать слепок)

Представь, ты настроил своё виртуальное окружение, всё летает. Чтобы этот прекрасный миг запечатлеть на века, пишешь в терминале вот эту магическую хуйню:

pip freeze > requirements.txt

Эта команда, сука, выгрузит всё, что у тебя установлено, в файл. Получится что-то типа:

Django==4.2.7
psycopg2-binary==2.9.9
requests==2.31.0

Вот это и есть твоя библия, твой рецепт успеха. Без него — пиздец и мрак.

2. Развернуть всё на другом месте

Принёс ты этот файл на другой комп, или в CI/CD, или просто после переустановки системы. Чтобы не вспоминать, что там было, пишешь:

pip install -r requirements.txt

И пип, этот хитрожопый ублюдок, сам всё поставит в тех же версиях. Красота, ёпта!

А теперь, блядь, важные моменты, чтобы не было потом мучительно больно:

  • Виртуальные окружения (venv) — это святое. Это как отдельная квартира для каждого проекта, чтобы они друг другу по ебалу не давали. Никогда не ставь пакеты глобально, иначе будет овердохуища проблем. Сначала создай, потом активируй.

    # Создаём квартиру для проекта
    python -m venv .venv
    # Заселяемся в неё (Linux/macOS)
    source .venv/bin/activate
  • Разделяй и властвуй. Для серьёзных проектов делай два файла: один (requirements.txt) — только то, что нужно для работы программы в бою. Второй (например, dev-requirements.txt) — всякую хуйню для разработки: тесты, линтеры, форматтеры. Чтобы в продакшене не тащить за собой трёхтонную мартышлюшку в виде pytest.

  • Если совсем заебалось руками версии подбирать — глянь на pip-tools. Там ты пишешь в requirements.in только главные пакеты, а он сам генерирует requirements.txt со всеми зависимостями зависимостей. Удобно, но если проект маленький — можешь и забить хуй.

Вот и вся наука. Главное — не забывай это делать, а то потом будешь, как Герасим, на берегу озера стоять и орать «Муму!», когда проект уже на дно ушёл.