https://mypy-lang.blogspot.com/2021/06/mypy-0900-released.html
Самым крупным (и ломающим) изменением в этой версии является то, как
mypy ищет тайп-аннотации. Раньше у mypy внутри был вшит весь репозиторий typeshed, где хранилась информация о типах и для стандартной библиотеки, и для множества популярных (и не очень популярных) библиотек с PyPI, которые почему-то не могут или не хотят хранить типы прямо у себя в коде. Это было неудобно, потому что исправления в typeshed (а там постоянно что-то фиксят) становились доступны пользователям mypy только при очередном релизе mypy с задержкой в несколько месяцев. А ещё вместе с mypy вам в проект прилетали тайп-аннотации для кучи библиотек, которыми вы не пользуетесь.Короче, теперь у
mypy в комплекте есть типы только для стандартной библиотеки, а typeshed из одной царь-библиотеки распался на много маленьких, и вам нужно явно установить те из них, которые вам нужны. Например, если вы используете requests, то вам нужно доустановить пакет types-requests, иначе mypy будет не хватать информации о типах. Для этих маленьких пакетов с типами будут автоматически создаваться новые релизы при каждом изменении, вам нужно будет обновлять их время от времени независимо от mypy.Ещё из полезного добавлена поддержка кастомных тайп-гардов. Грубо говоря, теперь вы можете описать любую сколь угодно замысловатую логику валидации данных в функции (скорее всего это будет что-то с вызовами
isinstance()), и после вызова этой функции mypy сможет более точно вывести тип данных.Из других, менее крупных изменений отмечу следующие:
*
mypy по умолчанию больше не работает для Python 2 кода; возможность проверять такой код всё ещё есть, но для этого нужно устанавливать дополнительные зависимости;*
mypy научился читать свою конфигурацию из pyproject.toml.Мне нравится, что в Python появляется всё больше инструментов для типизации, а тайп-чекеры конкурируют между собой и становятся умнее.