В этом руководстве рассмотрим установку и использование простой библиотеки для проверки версий внешних зависимостей.
Бывает сложно гарантировать, что все среды, в которых работает ваш проект, используют одни и те же версии Python, PostgreSQL и остальные внешние зависимости. Часто среды разработки и CI имеют различные системы конфигурации, что затрудняет их синхронизацию. А координация между всеми членами вашей команды для обновления их локального окружения может быть затруднена, так как письма об обновлении или мгновенные сообщения забываются, если они находятся в отпуске, работают над другими проектами и т.д. А использование неверных версий внешних зависимостей может привести к трудноустранимым ошибкам, и в итоге придется затрачивать время на поиск, а так же на устранение последствий.
За годы работы на разных проектах я несколько раз решал эту проблему с помощью System check framework в Django. Фреймворк позволяет уведомлять о том, что на ранних стадиях запуска среда имеет некорректные версии. Сегодня я выпустил пакет, содержащий настраиваемые версии таких проверок, django-version-checks. Вы активируете проверки, указывая разрешенные версии в спецификаторах PEP 440, в том же формате, в котором используется pip.
Например, представьте, что вы используете передовые версии Python и MariaDB. Чтобы убедиться, что все среды используют эти версии, или совместимые выпуски для исправления ошибок, вы можете установить django-version-checks и добавить их в файл настроек:
VERSION_CHECKS = { "mysql": "~=10.5.4", "python": "~=3.8.1", }
В любых средах, чьи зависимости не соответствуют этим спецификаторам, будет обнаружена ошибка проверки системы.
Например, если бы я оставил свою среду разработки на Python 3.6 и попытался запустить миграцию:
python manage.py migrate SystemCheckError: System check identified some issues: ERRORS: ?: (dvc.E003) The current version of Python (3.6.1) does not match the specified range (~=3.8.1).
Произошло бы исключение SystemCheckError, которое не позволило бы осуществить миграцию данных.