Файл requirements.txt в Python: от простого списка до профессионального управления

Раздел: Python -> Управление зависимостями

Основные подходы к управлению зависимостями с requirements.txt

Файл requirements.txt является стандартным способом фиксации зависимостей проекта на Python. Он содержит список пакетов с версиями, необходимых для работы приложения. Ниже рассмотрены различные способы его создания и использования.

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

Наиболее распространенный метод - команда pip freeze. Она выводит список всех пакетов, установленных в текущем виртуальном окружении, вместе с их версиями. Перенаправление вывода в файл позволяет получить requirements.txt.

pip freeze > requirements.txt

Installing python modules (установка модулей python)

(содержимое файла, например)
requests==2.31.0
numpy==1.24.3
flask==2.3.2
...

Python requirements (файл requirements.txt в python)

Для установки зависимостей из такого файла используется:

pip install -r requirements.txt

Python requirements file (файл requirements.txt в python)

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

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

Типичные проблемы и ошибки:

  • Команда pip freeze захватывает все пакеты, включая те, что не используются напрямую (например, зависимости зависимостей). Это может привести к раздуванию файла.
  • Если в окружении установлены пакеты, не относящиеся к проекту (например, глобальные), они тоже попадают в список.
  • При развертывании на другой платформе могут возникнуть конфликты из-за разных версий системных пакетов (wheel, setuptools).
  • Решение: перед выполнением pip freeze рекомендуется использовать виртуальное окружение (venv) и выполнять команду только в нем. Также можно отфильтровать системные пакеты:
  • pip freeze | grep -v 'pip|wheel|setuptools' > requirements.txt

    Python get requirements (получение списка зависимостей requirements.txt в python)

Как вручную указать только необходимые зависимости с версиями и опциями?

Вместо автоматической генерации можно создать requirements.txt вручную, указав только те пакеты, которые импортируются в коде. Это дает полный контроль над зависимостями.

# requirements.txt (ручное создание)
requests>=2.20.0
flask~=2.3.0
numpy<=1.26.0,>=1.19.0
# комментарии поддерживаются
-e git+https://github.com/psf/requests.git@v2.31.0#egg=requests

сделать requirements python (создание requirements.txt для python)

Поддерживаются версионные спецификаторы (>=, <=, ~=, ==, !=), а также ссылки на репозитории.

Проблемы: ручной список может устареть, легко пропустить какую-либо зависимость, особенно если проект использует неявные импорты. Нет автоматического обновления версий.

Как автоматически определить используемые в проекте пакеты и создать requirements.txt?

Инструмент pipreqs сканирует исходный код проекта и формирует список только тех пакетов, которые действительно импортируются. Это решает проблему лишних зависимостей.

pip install pipreqs
pipreqs /path/to/project --ignore venv --savepath requirements.txt

Python uv install (установка пакетов с помощью uv в python)

(создается файл только с библиотеками, используемыми в коде)

Requests python versions (проверка версии библиотеки requests в python)

Цель: получение минимального набора зависимостей, упрощение воспроизведения окружения.

Типичные ошибки: pipreqs может не распознать динамические импорты или библиотеки, которые не импортируются напрямую, но являются зависимостями других библиотек. Также может включать пакеты, используемые только в тестах. Рекомендуется проверять результат вручную.

Как управлять зависимостями через Pipenv с автоматической изоляцией?

Pipenv создает виртуальные окружения автоматически и использует файлы Pipfile и Pipfile.lock. Из них можно экспортировать классический requirements.txt.

pip install pipenv
cd /myproject
pipenv install requests flask
pipenv lock -r > requirements.txt

проверить библиотеки python (проверка установленных библиотек python)

(создает requirements.txt с точными версиями из lock-файла)

No matching distribution found for python (решение ошибки «no matching distribution found» при установке пакетов python)

Цель: упрощение управления виртуальными окружениями и зависимостями, автоматический lock-файл для детерминизма.

Проблемы: Pipenv может быть медленным, не всегда корректно обрабатывает конфликты разрешений версий. В больших проектах сложнее отлаживать зависимости.

Как использовать Poetry для управления зависимостями в pyproject.toml?

Poetry - современный инструмент, который использует стандарт pyproject.toml и предоставляет команды для экспорта в requirements.txt.

pip install poetry
cd /myproject
poetry init
poetry add requests
poetry export -f requirements.txt --output requirements.txt

Python файл requirements (файл requirements.txt в python)

(создает requirements.txt с зависимостями и подзависимостями)

как создать requirements txt файл python (создать файл requirements.txt)

Цель: единый формат для метаданных и зависимостей, поддержка сборки пакетов, автоматические обновления.

Ошибки: может возникнуть несовместимость с более старыми версиями pip, если экспортированный файл содержит нестандартные URI. Также требуется установка самого Poetry на всех машинах разработки.

Как управлять зависимостями через Conda с файлом environment.yml?

Conda - менеджер пакетов и окружений, популярный в научном сообществе. Экспорт окружения в YAML-формат, который можно конвертировать в requirements.txt.

conda env export --from-history > environment.yml

Для конвертации в requirements.txt можно использовать conda list --export:

conda list --export > requirements.txt
(получается список в формате, похожем на pip)

Цель: использование в проектах с не-Python зависимостями или при необходимости специфических бинарных библиотек.

Проблемы: файл requirements.txt из Conda может содержать пакеты, которых нет в PyPI. Также Conda создает изолированное окружение, но его размер может быть большим.

Как использовать pip-tools для создания чистого requirements.txt из файла с верхнеуровневыми зависимостями?

pip-tools предоставляет утилиты pip-compile и pip-sync. Пользователь описывает только прямые зависимости в файле requirements.in, а затем генерируется полный lock-файл requirements.txt.

# requirements.in
requests
flask
pip-compile requirements.in
(создается requirements.txt со всеми разрешенными версиями)

Цель: разделение прямых и косвенных зависимостей, получение детерминированных сборок.

Ошибки: pip-compile может быть медленным при большом количестве зависимостей. Необходимость запуска процесса компиляции при каждом изменении.

Расширенные примеры использования requirements.txt

Ниже приведены дополнительные примеры, которые помогут более гибко управлять зависимостями.

Пример 1: Использование опции --hash для верификации пакетов

Пример
pip freeze --hash > requirements.txt

В результате файл содержит хеши каждого пакета, что повышает безопасность, но делает его менее читаемым. Установка с проверкой хеша возможна только при указании --require-hashes.

Пример 2: Фильтрация системных пакетов с помощью grep (Windows)

Пример
pip freeze | findstr /V 'pip wheel setuptools' > requirements.txt

На Windows аналог grep - findstr. Удаляет строки, содержащие указанные пакеты.

Пример 3: Извлечение зависимостей из Pipenv с разделением на dev и prod

Пример
pipenv lock -r --dev > dev-requirements.txt
pipenv lock -r > requirements.txt

Флаг --dev включает dev-зависимости. Таким образом можно разделить окружение для разработки и продакшена.

Пример 4: Poetry - экспорт только определенных групп зависимостей

Пример
poetry export -f requirements.txt --dev --without-hashes --output dev-reqs.txt

Экспорт с dev-зависимостями, без хешей, в отдельный файл.

Пример 5: Использование pip-tools с указанием совместимых версий

Пример
# requirements.in
numpy>=1.20
scipy~=1.7
Пример
pip-compile --upgrade-package numpy --output-file new-requirements.txt requirements.in

Команда обновляет только указанный пакет и пересчитывает зависимости.

Пример 6: Создание requirements.txt из Conda окружения с сохранением каналов

Пример
conda list --explicit > requirements.txt

Этот формат включает точные URL пакетов, что подходит для точного воспроизведения, но не совместим с pip.

Пример 7: Интеграция requirements.txt в Dockerfile

Пример
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD python app.py

Такой подход минимизирует количество слоев и ускоряет сборку.

Пример 8: Использование pip freeze с виртуальным окружением, созданным в Python 3.12

Пример
python -m venv .venv
source .venv/bin/activate  # Linux/Mac
pip install -r requirements.txt
pip freeze > requirements.lock.txt

Создание lock-файла после установки - двойная фиксация зависимостей.

Пример 9: Автоматическое создание requirements.txt из pyproject.toml без сторонних инструментов

С помощью pip install . и последующего pip freeze можно получить список, но это не рекомендуется.

Пример
pip install -e .
pip freeze > requirements.txt

Проблема: захватываются все пакеты окружения.

Файл requirements.txt в Python - comments

En
Python requirements (python)