Зачем «пинить» пакеты в requirements.txt

Николай Сасковец, инженер-программист, iTechArt

Пинь!

Зачем «пинить» пакеты в requirements.txt

2019-01-12, Николай Сасковец, инженер-программист, iTechArt

1. Предсказуемость

2. Детерминированность


celery
django>=2.0.0
djangorestframework>=3.8.0,<3.9.5

Плохо


celery==4.2.1
django==2.1.4
djangorestframework==3.9.0

Хорошо

==

Если вы так не делаете, то вы никогда не сможете знать, что у вас будет установлено при следующем деплое

Даже при сборке окружения «с нуля» вы можете получить эти проблемы

Результат pip install без == зависит от:

«Пинить» нужно и ваши непосредственные зависимости, и зависимости зависимостей,
 

«Пинить» нужно и ваши непосредственные зависимости, и зависимости зависимостей,
и зависимости зависимостей зависимостей…

Минусы «запинивания»

Workaround для минусов


celery
django>=2.0.0
djangorestframework>=3.8.0,<3.9.5

Хорошо
( потому что requirements.in )

Инструменты

Links


shurph.github.io/talks/python-pin-it/
shurph.github.io/talks/python-pin-it/  by Mikalai Saskavets