Управление зависимостями Python с помощью requirements.txt

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

Основы использования requirements.txt

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

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

Основной способ – использование команды pip freeze. Она выводит список всех установленных пакетов с их текущими версиями. Результат можно перенаправить в файл:

pip freeze > requirements.txt

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

Пояснение: команда запускается в активированном виртуальном окружении. После выполнения в текущей директории появится файл requirements.txt со строками вида package==version.

$ pip freeze > requirements.txt
$ cat requirements.txt
numpy==1.24.3
pandas==2.0.3
requests==2.31.0

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

Как установить все зависимости из файла?

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

pip install -r requirements.txt

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

Параметр -r указывает pip читать список пакетов из файла. Установка происходит автоматически с учетом версий.

Типичная ошибка: если файл содержит конфликтующие версии (например, numpy==1.24.3 и другой пакет требует numpy>=1.25), установка прервется с сообщением о несоответствии. Решение: отредактировать файл, выбрав совместимые версии, или использовать pip install -r requirements.txt --upgrade для обновления.

Как создать requirements.txt вручную?

Иногда требуется указать не все пакеты окружения, а только необходимые для проекта. В таком случае файл создается вручную. Каждая строка – это имя пакета, optionally с указанием версии:

# requirements.txt (ручное заполнение)
flask==2.3.3
gunicorn
# это комментарий
pandas>=1.5.0, <2.0.0

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

Примечание: комментарии начинаются с #. Можно задавать диапазоны версий, минимальные версии и исключения.

Как разделить зависимости для разработки и продакшена?

Часто требуются разные наборы пакетов для разных сред. Самый простой способ – создать несколько файлов: requirements-base.txt, requirements-dev.txt и т.д. Затем в основном файле можно ссылаться на другие файлы через -r:

# requirements.txt (основной)
-r requirements-base.txt
-r requirements-dev.txt

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

Или использовать отдельные команды для установки:

pip install -r requirements-base.txt
pip install -r requirements-dev.txt

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

Популярная альтернатива – разделение на секции с помощью файла environment.yml (для conda) или использование групп зависимостей в Pipfile (Pipenv).

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

Как указать зависимости из репозитория или локального пути?

В requirements.txt можно ссылаться не только на PyPI, но и на Git-репозитории, архивы или локальные папки:

# ссылка на ветку git
-e git+https://github.com/user/package.git@branch#egg=package-name
# локальный wheels
./dist/mypackage-1.0.0-py3-none-any.whl
# URL архива
https://example.com/packages/mypackage.tar.gz

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

Ключ -e означает установку в режиме редактирования (для локальной разработки).

Как использовать альтернативный индекс пакетов?

Если требуется установить пакет из частного репозитория, можно указать индекс через параметр -i непосредственно в команде или в самом файле с помощью опции --index-url:

pip install -r requirements.txt --index-url https://private.pypi.org/simple/

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

Также допустимо записать эту опцию в файле:

# requirements.txt
--index-url https://private.pypi.org/simple/
package-name==1.0.0

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

Как игнорировать некоторые пакеты при установке?

Если нужно пропустить часть зависимостей (например, пакеты для тестирования), можно использовать флаг --no-deps, но это не избирательно. Лучше создать отдельный файл для продакшена без dev-зависимостей, как описано выше.

Распространенная проблема: платформозависимые пакеты (например, pywin32) могут быть указаны в requirements.txt и вызвать ошибку на Linux. Решение: использовать маркеры окружения, поддерживаемые pip (начиная с pip 6.0):

pywin32; sys_platform == "win32"
pyobjc; sys_platform == "darwin"

Эти условия проверяются при установке, и пакет устанавливается только на соответствующей платформе.

На этом базовая работа с requirements.txt заканчивается. Для более сложных проектов рекомендуется рассмотреть специализированные инструменты: Poetry, Pipenv или Conda, которые автоматически управляют файлами зависимостей и разрешают конфликты.

Расширенные примеры работы с requirements.txt

Как экспортировать только прямые зависимости?

Команда pip freeze выводит все установленные пакеты, включая транзитивные. Для получения только тех пакетов, которые явно добавлены в проект, можно использовать pip list --format=freeze | grep -v "-" (на Linux) или более надежный метод – установить pip-tools:

Пример
pip install pip-tools
# создаём requirements.in с прямыми зависимостями
# компилируем в requirements.txt
pip-compile requirements.in
$ cat requirements.in
flask
numpy
$ pip-compile requirements.in
# файл requirements.txt будет сгенерирован со всеми зависимостями и подверсиями

Как обновить все зависимости до последних версий, сохраняя ограничения?

Для обновления пакетов в requirements.txt до последних совместимых версий (с учетом заданных диапазонов) используется pip install --upgrade -r requirements.txt. Но эта команда обновит только те пакеты, версия которых явно не зафиксирована. Если нужно обновить всё, следует сначала снять фиксацию (package>=x вместо package==x), выполнить обновление и затем снова зафиксировать.

Пример
# исходный файл с фиксацией
numpy==1.24.3
pandas==2.0.3
# замена на >=
pip install --upgrade -r requirements.txt  # обновит до последней версии
pip freeze > requirements.txt              # обновлённый финал

Как проверить наличие конфликтов до установки?

Инструмент pip check проверяет, все ли зависимости удовлетворены. Если есть конфликт, он сообщит о несовместимых версиях.

Пример
pip check
$ pip check
No broken requirements found.

Для более глубокого анализа можно использовать pipdeptree:

Пример
pip install pipdeptree
pipdeptree
pipdeptree
numpy==1.24.3
pandas==2.0.3
  - numpy [required: >=1.20.3, installed: 1.24.3]
  - python-dateutil [required: >=2.8.1, installed: 2.8.2]
    - six [required: >=1.5, installed: 1.16.0]
requests==2.31.0
...

Как интегрировать requirements.txt с Docker?

В Dockerfile часто копируют 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"]

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

Как использовать requirements.txt с проектами на базе setuptools?

Файл requirements.txt не является частью стандартной упаковки Python, но его можно указать в setup.py или setup.cfg. Однако удобнее использовать install_requires в setup.py для долгосрочных проектов, а requirements.txt – для временного воспроизведения окружения. Например:

Пример
# setup.py
from setuptools import setup
setup(
    name="mypackage",
    install_requires=[
        "numpy>=1.20",
        "pandas",
    ],
    extras_require={
        "dev": ["pytest", "sphinx"]
    },
)

Для установки с dev-зависимостями: pip install -e .[dev]

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

Не рекомендуется хранить пароли в файле. Вместо этого используется --extra-index-url с переменными окружения или конфигурация pip в pip.conf/~/.netrc.

Пример
# .netrc
machine private.pypi.org login user password secret
# затем в requirements.txt:
--extra-index-url https://private.pypi.org/simple/
my-private-package==1.0

Эти примеры покрывают большинство сценариев повседневного использования requirements.txt в реальных проектах.

Файл requirements.txt в Python - comments

En
Python requirements file (python)