В Python-проектах зависимости указываются в специальных файлах, от которых напрямую зависит воспроизводимость среды и корректная работа кода. Наиболее распространённый файл – requirements.txt. Он используется для перечисления всех внешних библиотек с указанием точных или минимальных версий. Пример строки в таком файле: requests==2.31.0. Установка выполняется командой pip install -r requirements.txt.
Если проект структурирован как пакет, применяется файл pyproject.toml. Он был стандартизирован в PEP 518 и поддерживается современными сборщиками, такими как poetry или flit. В этом файле зависимости указываются в разделе [tool.poetry.dependencies] или аналогичном, в зависимости от используемого инструмента. Такой подход предпочтительнее, если требуется управление не только зависимостями, но и конфигурацией сборки.
Файл setup.py также может содержать зависимости через аргумент install_requires, однако его использование постепенно уходит на второй план. Тем не менее, он остаётся актуален в старых проектах и при ручной настройке сборки.
Где в проекте искать файл с зависимостями
Файл с зависимостями чаще всего находится в корневом каталоге проекта. Наиболее распространённые варианты: requirements.txt, pyproject.toml и Pipfile.
requirements.txt – стандартный текстовый файл, который обычно размещают рядом с директориями src, app или project_name. Если проект развёрнут через виртуальное окружение, этот файл можно найти рядом с каталогом venv или в репозитории рядом с файлом README.md.
pyproject.toml – используется в современных проектах, особенно с poetry или build. Ищите его в корне проекта, где также может располагаться poetry.lock.
Pipfile встречается в проектах, использующих pipenv. Он тоже находится в корневой папке, вместе с Pipfile.lock.
Если ни один из этих файлов не обнаружен, выполните поиск по содержимому: откройте терминал и выполните grep -ri «flask» . (замените flask на любую известную зависимость). Это поможет быстро найти, где перечислены библиотеки.
Также полезно проверить setup.py, если проект оформлен как пакет. В нём могут быть указаны зависимости через параметр install_requires.
Чем отличаются requirements.txt и pyproject.toml
requirements.txt
– простой список зависимостей с указанием версий. Используется в первую очередь для фиксации точного набора библиотек в конкретной среде. Не поддерживает метаинформацию о проекте, не описывает сборку или публикацию пакета. Подходит для развёртывания и быстрого воспроизведения окружения.
- Содержит строки вида
package==version
- Поддерживается pip напрямую:
pip install -r requirements.txt
- Не управляет сборкой, метаданными, зависимостями разработчика
- Часто используется вместе с
pip freeze
для фиксации среды
pyproject.toml
– структурированный файл конфигурации, введённый PEP 518. Поддерживает описание зависимостей, конфигурации сборщиков, метаданных проекта и зависимостей для разработки.
- Обязателен для современных инструментов сборки: Poetry, Hatch, PDM, Flit
- Позволяет разделять зависимости по группам:
[tool.poetry.dependencies]
,[tool.poetry.dev-dependencies]
- Хранит метаданные: имя пакета, версия, описание, лицензия
- Управляет процессом сборки через
[build-system]
requirements.txt
– для установки. pyproject.toml
– для управления всем проектом. В современных проектах предпочтительнее использовать pyproject.toml
, особенно при публикации на PyPI или использовании Poetry.
Когда использовать requirements.txt, а когда pyproject.toml
requirements.txt
уместен в проектах, где нужен быстрый способ зафиксировать конкретные версии зависимостей для установки через pip. Он особенно полезен для деплоймента и CI/CD, когда необходимо воспроизводимое окружение без использования дополнительных инструментов сборки. Этот файл поддерживает фиксированные версии, диапазоны и ссылки на git-репозитории или архивы. Пример строки: requests==2.31.0
.
pyproject.toml
предпочтительнее, если проект использует современные инструменты сборки, такие как Poetry или Flit, или планируется публикация в PyPI. Он объединяет конфигурацию сборщика и зависимости, включая build-system и dev-зависимости. В отличие от requirements.txt
, он поддерживает декларативный подход и разделение зависимостей на категории, например, [tool.poetry.dependencies]
и [tool.poetry.dev-dependencies]
.
Для библиотек, распространяемых через PyPI, pyproject.toml
обязателен с 2020 года. Для приложений, не предназначенных для распространения, допустимо использовать только requirements.txt
, но при этом теряется удобство управления зависимостями и версионирования, доступное через pyproject.toml
.
Если используется Poetry, requirements.txt
может быть сгенерирован автоматически командой poetry export
для нужд окружения, не поддерживающего pyproject.toml
.
Как указать версии пакетов и диапазоны совместимости
В файле requirements.txt
или в секции dependencies
файла pyproject.toml
версии пакетов задаются с помощью операторов сравнения: ==
, >=
, <
, !=
, ~=
, >
, <=
. Например, строка requests==2.31.0
фиксирует точную версию, а requests>=2.25.0,<3.0.0
допускает все минорные обновления в пределах основной версии.
Оператор ~=
означает совместимость с указанной версией. Запись flask~=2.2.0
эквивалентна диапазону >=2.2.0,==2.3.0
, то есть разрешает обновления до следующей версии с изменённой второй цифрой.
Не рекомендуется использовать только >=
без верхней границы, так как это может привести к неработающим зависимостям при выпуске несовместимых обновлений. Всегда задавайте диапазон, особенно для библиотек, которые активно развиваются.
Для полного контроля над зависимостями используйте файл requirements.txt
с зафиксированными версиями. Для гибкости – pyproject.toml
с диапазонами. При разработке библиотек предпочтительнее указывать совместимость через ~=
или комбинацию >=
и <
, чтобы сохранить обратную совместимость с будущими версиями среды пользователя.
Что делать, если зависимости указаны в нескольких файлах
Удалите дублирующие записи из вспомогательных файлов. Если используется requirements.txt
только для установки в окружении, его можно сгенерировать автоматически на основе pyproject.toml
с помощью pip-compile
из пакета pip-tools
. В случае использования setup.py
– перенесите зависимости в pyproject.toml
, если проект поддерживает PEP 621.
После консолидации – настройте автоматическую проверку согласованности. Используйте tox
или nox
с отдельной сессией для проверки установки зависимостей. Это поможет выявлять расхождения между файлами до того, как они попадут в окружение.
При использовании CI обязательно указывайте установку зависимостей из одного источника. Например, pip install .
при наличии pyproject.toml
или pip install -r requirements.txt
, если выбран именно этот файл. Не совмещайте оба подхода в одном пайплайне.
Для упрощения управления – зафиксируйте список зависимостей в lock-файле, если используется Poetry (poetry.lock
) или requirements.txt
, сгенерированный через pip freeze
или pip-compile
. Не редактируйте lock-файлы вручную.
Как установить зависимости из выбранного файла
Для установки зависимостей из файла в Python проекте, чаще всего используется файл requirements.txt
или файл с описанием зависимостей в формате pyproject.toml
. Рассмотрим процесс установки зависимостей для каждого из этих файлов.
Чтобы установить зависимости из requirements.txt
, нужно воспользоваться утилитой pip
. Для этого выполните следующую команду в терминале в корневой директории проекта:
pip install -r requirements.txt
Команда прочитает файл requirements.txt
и установит все указанные в нем библиотеки. Важно убедиться, что файл имеет актуальные версии зависимостей. Если версия Python в вашем проекте отличается от глобальной, можно использовать виртуальное окружение, чтобы избежать конфликтов.
Если вы используете файл pyproject.toml
, который является новым стандартом для управления зависимостями, необходимо использовать инструмент, поддерживающий этот формат. Например, Poetry
или Pipenv
. Для установки зависимостей через Poetry
выполните команду:
poetry install
Эта команда установит все зависимости, перечисленные в разделе tool.poetry.dependencies
вашего файла pyproject.toml
. Важно помнить, что Poetry
также создает файл poetry.lock
, который фиксирует точные версии библиотек, что позволяет обеспечить стабильную работу проекта на разных машинах.
Если проект использует Pipenv
, то для установки зависимостей из Pipfile
используйте команду:
pipenv install
После выполнения команды pipenv install
все зависимости, указанные в Pipfile
, будут установлены в виртуальное окружение, создаваемое автоматически.
Вопрос-ответ:
Что такое файл зависимостей в Python проекте?
Файл зависимостей в Python проекте — это файл, который перечисляет все внешние библиотеки и пакеты, которые должны быть установлены для правильной работы проекта. Обычно для этого используется файл `requirements.txt`. Он позволяет легко установить все необходимые пакеты с помощью команды `pip install -r requirements.txt`.
Почему в Python для указания зависимостей используют именно файл `requirements.txt`?
Файл `requirements.txt` используется, потому что он упрощает процесс установки всех зависимостей для проекта. В нем можно указать точные версии пакетов, которые использовались при разработке проекта, что помогает избежать проблем с несовместимостью версий и ошибками при запуске. Это стандартный и удобный способ для большинства Python-проектов.
Как создать файл зависимостей для Python проекта?
Для создания файла зависимостей можно использовать команду `pip freeze > requirements.txt`. Эта команда создаст файл, в который будут записаны все текущие установленные пакеты и их версии в вашем виртуальном окружении. Это даст возможность легко воспроизвести ваше окружение на другом компьютере или сервере.
Можно ли использовать файл `Pipfile` вместо `requirements.txt` в Python проекте?
Да, можно. Вместо `requirements.txt` можно использовать файл `Pipfile`, который является частью инструмента для управления зависимостями `pipenv`. Этот файл также указывает на необходимые библиотеки и их версии, но предоставляет более гибкие возможности для работы с зависимостями и виртуальными окружениями. Он более современный и предлагает улучшенные функции по сравнению с традиционным `requirements.txt`.
Как указать версии пакетов в файле `requirements.txt`?
В файле `requirements.txt` можно указать точные версии пакетов, используя операторы сравнения. Например, можно записать так: `package==1.0.0` для точной версии, `package>=1.0.0` для минимальной версии или `package<=2.0.0` для максимальной версии. Это позволяет точно контролировать, какие версии пакетов будут установлены при настройке проекта на других машинах.