Использование 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

Ответить