Как запустить mypy на коде, чувствительном к версии стороннего пакетаPython

Программы на Python
Anonymous
Как запустить mypy на коде, чувствительном к версии стороннего пакета

Сообщение Anonymous »

В настоящее время я отвечаю за написание кода библиотеки, совместимого с pydantic v1 и v2.
Получить функционал кода более или менее просто, поскольку вы можете сделать выбор с учетом версии в ваш код для удовлетворения вашего набора тестов, например. используя такие шаблоны:

Код: Выделить всё

import pydantic

PYDANTIC_VERSION = packaging.version.parse(pydantic.__version__)

if PYDANTIC_VERSION.major == 1:
# do some v1 things
else:
# do some v2 things
Однако обеспечить совместимость этого кода с проверками типов mypy кажется трудным, поскольку mypy не разрешает переменную PYDANTIC_VERSION и всегда проходит через обе стороны блоков if. Это будет постоянно вызывать ошибки mypy в обоих мирах внутри нашего CI (где mypy должен работать с обеими версиями).
Это имеет смысл, поскольку mypy не является средством проверки типов во время выполнения, но я Интересно, существуют ли какие-либо передовые методы достижения такой цели.
Эта проблема не уникальна для pydantic, это всего лишь пример. Я знаю, что такие переключатели версий работают в версии интерпретатора (

Код: Выделить всё

sys.version_info
), но я не могу найти способ заставить mypy пропускать весь блок кода, если версия pydantic равна 1.x.x или 2.x.xЯ искал проблемы в mypy и Stack Overflow, но, учитывая тысячи проблем и статей, очень сложно найти существующие (в конечном итоге решенные или исправленные) подробности по этой теме.

Подробнее здесь: https://stackoverflow.com/questions/783 ... itive-code

Вернуться в «Python»