pip и requirements.txt

Тема дорожной карты · Python Programming

pip — это инструмент для установки пакетов из PyPI в активное окружение. Перед тем как начать работу с пакетами, всегда создайте виртуальное окружение (venv) для изоляции зависимостей вашего проекта. Это можно сделать с помощью команды python -m venv .venv и активации созданного окружения с помощью source .venv/bin/activate.

requirements.txt — это простейший способ фиксации точных версий зависимостей вашего проекта. Вы можете создать файл requirements.txt с помощью команды pip freeze > requirements.txt. Однако, этот метод может смешивать прямые и транзитивные зависимости, что может привести к проблемам при воспроизведении вашего окружения на других машинах. Для серьёзных проектов рекомендуется использовать pyproject.toml для описания top-level зависимостей и собирать настоящий lockfile с помощью инструментов, таких как pip-tools, uv или Poetry.

Как это работает

pip и requirements.txt организуют код, обеспечивая четкое разделение между модулями и пакетами. Модуль — это .py-файл, а пакет — это директория с __init__.py (или namespace package без него). Команда import ищет модули и пакеты в sys.path, которая включает директорию скрипта, переменную окружения PYTHONPATH и директорию site-packages. Виртуальные окружения, такие как venv, virtualenv, poetry, и uv, изолируют зависимости на уровне проекта, позволяя двум проектам использовать разные версии одной и той же библиотеки.

pyproject.toml (PEP 518/621) описывает систему сборки проекта, метаданные проекта и зависимости. Команда pip install -e . позволяет установить локальный пакет в режиме редактирования, что удобно для разработки и тестирования.

Когда применять

Всегда используйте виртуальное окружение на проекте, чтобы избежать конфликтов между разными версиями библиотек. Никогда не устанавливайте пакеты глобально через pip, так как это может привести к неожиданным последствиям. Для современных проектов предпочтительно использовать pyproject.toml вместе с uv или Poetry, вместо простого requirements.txt. Использование lockfile гарантирует воспроизводимость установки зависимостей.

Разбирайте проект на пакеты, когда кодовая база переваливает за ~3-5 файлов в одной логической области или когда планируется публикация на PyPI. Используйте __main__.py, чтобы python -m mypkg запускал ваш скрипт.

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

Типичные ошибки при работе с pip и requirements.txt включают циклические импорты, когда один модуль импортирует другой, который в свою очередь импортирует первый модуль. Решение может заключаться в переносе общего символа в третий модуль или использовании локального импорта внутри функции.

Еще одна распространенная ошибка — это установка пакета в режиме редактирования (editable install) при наличии нескольких версий Python в переменной окружения PATH. В этом случае важно определить, какой Python запускается, используя команды which python и проверяя sys.executable внутри скрипта.

Коммитирование папки виртуального окружения в git также является распространенной ошибкой, так как это может привести к проблемам при воспроизведении окружения на других машинах. В этом случае рекомендуется добавить папку виртуального окружения в .gitignore.

Связанные понятия

Полезные ресурсы