Использование pip-tools для разрешения зависимостей
pip-tools
– это инструмент разработки Python, который поможет вам создавать детерминированные и предсказуемые сборки. Лучше всего можно это понять на примере.
Допустим, вы клонируете проект для работы над новой функцией. В первый день вы создаете virtualenv
и устанавливаете все зависимости (через requirements.txt
). К третьему дню вы закончили работу над функцией и готовы к выпуску. Однако за это время один из базовых пакетов изменился, и это привело к остановке во время сборки. Вы никогда не замечали этого, потому что у вас были разные зависимости локально. pip-tools
решает эту проблему путем компиляции файла requirements.txt
со всеми используемыми пакетами, включая базовые зависимости, закрепленными в файле.
У приложений есть зависимости для запуска, а также зависимости для разработки. Лучше использовать их оттельно requirements.in
и requirements-dev.in
. Это сохраняет скомпилированные зависимости отдельно друг от друга.
requirements.in
django<3.1
djangorestframework
requirements-dev.in
.
pip-tools
pytest
pytest-django
Затем можно настроить Makefile
для ускорения разработки.
# This is usually my first target so as soon as a developer clones
# a project and creates a virtualenv they can just run `make` to get things going.
install:
@pip install \
-r requirements.txt \
-r requirements-dev.txt
compile:
@rm -f requirements*.txt
@pip-compile requirements.in
@pip-compile requirements-dev.in
sync:
@pip-sync requirements*.txt
Затем можно сделать тест make test
, просто чтобы убедиться, что все работает.
Я хочу выделить одну из моих любимых функций pip-tools
, а именно то, что она показывает, откуда появились зависимости в файлах requirements.txt
.
django==2.1.15
# via
# -c requirements.txt
# django-debug-toolbar