Управление проектом Python: как правильно составить файл requirements.txt

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

Основные способы создания requirements.txt

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

Как создать requirements.txt со всеми зависимостями текущего окружения?

pip freeze > requirements.txt

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

Команда выводит список всех установленных пакетов в формате package==version и перенаправляет вывод в текстовый файл. Если файл уже существует, он будет перезаписан. Чтобы добавить новые зависимости без удаления старых, используют оператор >>:

pip freeze >> requirements.txt

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

После генерации файла открыть его и проверить, что отсутствуют лишние записи (например, pip, setuptools, wheel). Обычно их удаляют вручную, так как они не являются прямыми зависимостями проекта.

Типичная ошибка: выполнение команды вне виртуального окружения. В этом случае pip freeze покажет все глобально установленные пакеты, что приведёт к избыточному и невоспроизводимому списку. Решение: всегда активировать виртуальное окружение (venv или virtualenv) перед запуском команды.

Как создать requirements.txt вручную для небольшого проекта?

Для проектов с двумя-тремя зависимостями проще написать файл самому в текстовом редакторе. Формат: одно имя пакета (или с версией) на строку:

requests
flask==2.3.0
numpy>=1.21

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

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

Ошибка: указание несовместимых версий. Решение: перед фиксацией проверить совместимость командой pip install -r requirements.txt в чистом окружении.

Как автоматически создать requirements.txt на основе импортов в проекте (без лишних зависимостей)?

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

pip install pipreqs
pipreqs /путь/к/проекту --force

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

Флаг --force перезаписывает существующий файл. Если проект содержит много подпапок, рекурсивный поиск выполняется автоматически.

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

Проблема: pipreqs может пропустить пакеты, которые импортируются динамически (например, в условных импортах). Решение: дополнить файл вручную после проверки.

Ещё одна трудность - неоднозначность имён (например, PIL импортируется как from PIL import Image, а пакет называется Pillow). pipreqs обычно корректно сопоставляет такие псевдонимы, но в сложных случаях требуется ручная корректировка.

Как создать requirements.txt из Pipfile (при использовании Pipenv)?

Pipenv по умолчанию использует Pipfile и Pipfile.lock. Для экспорта в классический requirements.txt применяется команда:

pipenv lock -r > requirements.txt

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

Если нужны только зависимости для разработки (dev-packages), добавляют флаг --dev:

pipenv lock -r --dev > requirements-dev.txt

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

Цель: преобразование формата Pipenv в общепринятый для совместимости с CI/CD или другими разработчиками, не использующими Pipenv.

Ошибка: если Pipfile.lock отсутствует или устарел, команда выдаст предупреждение. Решение: сначала выполнить pipenv lock для обновления lock-файла.

Как сгенерировать requirements.txt из зависимостей Poetry?

В Poetry есть встроенная команда экспорта:

poetry export -f requirements.txt --output requirements.txt

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

Чтобы включить dev-зависимости, добавляют флаг --dev:

poetry export --dev -f requirements.txt -o requirements-dev.txt

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

При необходимости можно указать хэши (ключ --with-hashes) для проверки целостности.

Применение: интеграция проектов на Poetry в экосистемы, где требуется только requirements.txt.

Проблема: если в pyproject.toml используются зависимости из частных индексов (--extra-index-url), экспорт может не включить их корректно. Решение: вручную добавить блок --extra-index-url в начало requirements.txt.

Как создать requirements.txt с помощью conda для смешанных проектов (Python + не-Python пакеты)?

Команда conda list --export выводит список из conda-каналов, включая пакеты, установленные не через pip. Однако такой файл не полностью совместим с pip. Лучше использовать раздельное управление или экспорт только pip-части:

conda list | grep -E '^pip|^python' | awk '{print $1"=="$2}' > requirements_conda.txt

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

Или же, если нужно получить список, понятный pip, следует сначала извлечь только pip-пакеты:

conda list --export | grep -E 'pypi' | sed 's/.*=//' > requirements.txt

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

Цель: работа в сложных окружениях, где используются не только pip-пакеты, но и conda-каналы (например, бинарные библиотеки).

Типичная ошибка: смешение форматов conda и pip в одном файле, из-за чего pip install -r requirements.txt падает с ошибками. Решение: создавать два отдельных файла: один для conda (environment.yml), второй для pip отсюда.

Как управлять версиями зависимостей через pip-tools (pip-compile)?

Подход «requirements.in / requirements.txt» даёт контроль над прямыми зависимостями, а транзитивные фиксируются автоматически. Сначала создаётся файл requirements.in с перечнем нужных пакетов (можно без версий):

Flask
requests>=2.25

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

Затем запускается pip-compile для генерации requirements.txt с полными версиями:

pip-compile requirements.in

Флаг --upgrade обновляет все пакеты до последних совместимых версий, флаг --output-file позволяет указать имя выходного файла.

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

Проблема: pip-compile может не учесть зависимости, указанные с помощью опции --hash или --trusted-host. Решение: эти параметры добавляют вручную в сгенерированный файл.

Расширенные примеры и нестандартные сценарии

Пример 1: requirements.txt с диапазонами версий и ограничениями

Файл может содержать не только точные версии, но и диапазоны, а также комментарии:

Пример
# Основные зависимости
Django>=3.2,<4.0
celery>=5.0,!=5.0.1
pandas~=1.3.0  # эквивалентно >=1.3.0,==1.3.*
--extra-index-url https://private-pypi.example.com/simple
private-package==1.0

Комментарии начинаются с #. Опция --extra-index-url позволяет указать дополнительный индекс пакетов (полезно для частных репозиториев). Результат установки: все перечисленные пакеты будут установлены с учётом ограничений.

Пример 2: Использование pip freeze с фильтрацией под Windows и Linux

Чтобы исключить системные пакеты из вывода, применяют grep (Linux) или findstr (Windows).

Linux (bash):

Пример
pip freeze | grep -v -E '^(pip|setuptools|wheel|distribute)@' | grep -v '^#' > requirements.txt

Windows (PowerShell):

Пример
pip freeze | Select-String -NotMatch '^(pip|setuptools|wheel|distribute)@' | Set-Content requirements.txt

Эти команды удалят строки, начинающиеся с указанных имён. Результат: чистый файл без встроенных системных пакетов.

Пример 3: Создание requirements.txt из Pipenv с группировкой по категориям

Pipenv позволяет экспортировать обычные и dev-зависимости в разные файлы, а также добавить каналы:

Пример
cd /путь/к/проекту
pipenv lock -r --dev > requirements-dev.txt
pipenv lock -r > requirements.txt

Если проект использует несколько Python-версий, можно указать конкретную версию через переменную среды:

Пример
PYTHON=python3.9 pipenv lock -r > requirements-py39.txt

Результат: два отдельных файла, один для продакшна, другой для разработки.

Пример 4: poetry export для проекта с git-зависимостями

В pyproject.toml могут быть зависимости, указанные как git-репозитории:

Пример
[tool.poetry.dependencies]
my-lib = {git = "https://github.com/user/my-lib.git", branch = "main"}

При экспорте через poetry export такие зависимости преобразуются в формат:

Пример
git+https://github.com/user/my-lib.git@<commit-hash>

Пример команды:

Пример
poetry export -f requirements.txt --without-hashes -o requirements.txt

Вывод (пример):

certifi==2023.11.17
git+https://github.com/user/my-lib.git@a1b2c3d4e5f6
requests==2.31.0

Флаг --without-hashes убирает хэши, если они не нужны.

Пример 5: Генерация requirements.txt с помощью pipreqs для проекта с несколькими модулями

Предположим, структура проекта:

Пример
my_project/
   main.py
   utils/
       __init__.py
       helpers.py

Запуск pipreqs из корня (с флагом --scan-notebooks для Jupyter-ноутбуков):

Пример
pipreqs . --force --scan-notebooks

Если проект использует специфичные импорты, например from cryptography.fernet import Fernet, pipreqs правильно определит пакет cryptography и запишет его в файл. Возможный результат:

cryptography==41.0.7
requests==2.31.0

При этом os, sys и другие встроенные модули не попадут в список.

Пример 6: Использование pip-compile для создания файла с хэшами и проверкой целостности

Команда с опцией --generate-hashes добавляет SHA-256 хэши для каждой зависимости:

Пример
pip-compile --generate-hashes --output-file=requirements-hashed.txt requirements.in

Содержимое requirements-hashed.txt будет включать строки вида:

flask==2.3.3 \
    --hash=sha256:... \
    --hash=sha256:...
requests==2.31.0 \
    --hash=sha256:...

Такие файлы обеспечивают повторяемость установки, так как пип проверяет хэши скачанных пакетов.

Пример 7: Объединение нескольких requirements-файлов

Часто требуется сборка итогового файла из нескольких источников. Например, есть requirements-base.txt (общие зависимости) и requirements-dev.txt (для разработки). Их можно объединить, удаляя дубликаты:

Пример
cat requirements-base.txt requirements-dev.txt | sort | uniq > requirements-all.txt

Под Linux. На Windows (PowerShell):

Пример
Get-Content requirements-base.txt, requirements-dev.txt | Sort-Object | Get-Unique | Set-Content requirements-all.txt

Результат: единый файл, содержащий все пакеты без повторений.

Пример 8: Автоматическое обновление requirements.txt при помощи pre-commit хука

В репозиторий можно добавить файл .pre-commit-config.yaml:

Пример
repos:
  - repo: https://github.com/pypa/pip-audit
    rev: v2.6.1
    hooks:
      - id: pip-audit
        args: ["-r", "requirements.txt"]

Такой хук при каждом коммите проверяет уязвимости в зависимостях. Аналогично можно автоматически запускать pip-compile при изменении requirements.in.

Создать файл requirements.txt - comments

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