Перейти к содержанию

requirements.txt

requirements.txt
файл со списком python зависимостей проекта.

Позволяет хранить и воспроизводить одинаковое окружение на разных машинах.


Зачем нужен requirements.txt

Без requirements.txt:

  • сложно понять какие библиотеки использует проект
  • невозможно быстро развернуть окружение
  • разные разработчики используют разные версии пакетов
  • CI/CD может работать иначе чем локальная машина

requirements.txt решает эту проблему.


Как работает

Файл содержит список python пакетов и их версий.

Пример:

requests==2.32.3
flask==3.0.2
urllib3==2.2.1

Когда выполняется:

pip install -r requirements.txt

pip:

  1. читает файл
  2. ищет пакеты в PyPI
  3. скачивает зависимости
  4. устанавливает нужные версии библиотек

Создание requirements.txt

Через pip freeze

pip freeze > requirements.txt

После выполнения появится файл:

requests==2.32.3
urllib3==2.2.1
certifi==2025.1.31

Установка зависимостей

pip install -r requirements.txt

pip автоматически установит все библиотеки из файла.


Форматы версий

Точная версия

requests==2.32.3

Используется чаще всего.

Позволяет получить полностью воспроизводимое окружение.


Минимальная версия

requests>=2.32.0

Разрешает установку более новых версий.


Диапазон версий

requests>=2.30,<3.0

Разрешает устанавливать версии только внутри диапазона.


Без фиксации версии

requests

Предупреждение

Не рекомендуется для production.


Структура production проекта

Часто используется несколько файлов зависимостей.

Основные зависимости

requirements.txt

Dev зависимости

requirements-dev.txt

Например:

pytest
black
flake8
mypy

Пример workflow

Создание проекта

mkdir myproject
cd myproject

Создание virtualenv

python3 -m venv .venv
source .venv/bin/activate

Установка библиотек

pip install requests flask

Создание requirements.txt

pip freeze > requirements.txt

Установка зависимостей на другой машине

pip install -r requirements.txt

Что происходит внутри

Когда выполняется:

pip install -r requirements.txt

pip:

  1. открывает requirements.txt
  2. читает список зависимостей
  3. проверяет версии
  4. ищет пакеты в PyPI
  5. скачивает wheel/source archives
  6. устанавливает библиотеки
  7. проверяет dependency tree

Best practices

Использовать virtualenv

requirements.txt почти всегда используется вместе с virtualenv.

Рекомендация

Один проект = один virtualenv + один requirements.txt


Фиксировать версии

Плохо:

requests
flask

Хорошо:

requests==2.32.3
flask==3.0.2

Коммитить requirements.txt в git

requirements.txt должен храниться в репозитории.


Обновлять зависимости осознанно

Не стоит бездумно обновлять все библиотеки.

Проверяйте:

  • changelog
  • breaking changes
  • compatibility

Anti-patterns

pip freeze из грязного окружения

Плохо:

pip freeze > requirements.txt

если в virtualenv установлен мусор.

В requirements.txt попадут ненужные библиотеки.


Хранение .venv в git

Нельзя коммитить virtualenv.

Добавьте:

.venv/

в .gitignore.


Отсутствие фиксации версий

Плохо:

requests
flask

Это делает окружение нестабильным.


Типичные ошибки

ModuleNotFoundError

Например:

ModuleNotFoundError: No module named 'requests'

Причины:

  • зависимости не установлены
  • virtualenv не активирован
  • requirements.txt не применён

Dependency conflicts

Разные библиотеки могут требовать несовместимые версии пакетов.

Например:

  • package A требует urllib3==1.x
  • package B требует urllib3==2.x

requirements.txt устарел

Причина:

  • разработчик установил новые библиотеки
  • но не обновил requirements.txt

Полезные команды

Создать requirements.txt

pip freeze > requirements.txt

Установить зависимости

pip install -r requirements.txt

Проверить конфликты зависимостей

pip check

Показать установленные пакеты

pip list

Обновить пакет

pip install --upgrade requests

Итог

requirements.txt
основной способ хранения python зависимостей проекта.

Используется вместе с:

  • pip
  • virtualenv
  • CI/CD
  • Docker
  • production deployment

Понимание requirements.txt — обязательный навык Python и DevOps инженера.