TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.4K subscribers
Post #7768 2.71K
👀 5 тайп-чекеров в Python — нужно ли запускать все?

mypy, Pyrefly, Pyright, ty, Zuban — и это ещё не конец списка. Как поддерживать библиотеку когда каждый чекер хочет свои аннотации.

Короткий ответ: не нужно гонять все пять по исходникам. Нужно гонять их по тестам.

Когда вы запускаете тайп-чекер на внутреннем коде — вы проверяете свою логику. Каким чекером пользоваться внутри — ваш выбор.

Но каким чекером пользуются ваши пользователи — не ваш выбор. Они придут с mypy, кто-то с Pyright, кто-то уже перешёл на ty. И все они будут взаимодействовать с вашим публичным API.

Запускайте как можно больше чекеров на тестах → убедитесь что публичный API работает для всех.

Пример из Polars

Вот во что превращается код когда пытаешься угодить всем чекерам сразу в исходниках:

@overload # type: ignore[override]
def __eq__( # pyrefly: ignore[bad-override]
self, other: pl.DataTypeExpr
) -> pl.Expr: ...

@overload
def __eq__(self, other: PolarsDataType) -> bool: ...

def __eq__( # ty: ignore[invalid-method-override]
# pyright: ignore[reportIncompatibleMethodOverride]
self, other: pl.DataTypeExpr | PolarsDataType
) -> pl.Expr | bool:

4 разных type-ignore комментария на 7 строк. Кодовая база быстро превращается в кашу.

А вот тест на тот же метод — все 5 чекеров проходят его без единой ошибки:

def test_dtype_time_units() -> None:
for time_unit in DTYPE_TEMPORAL_UNITS:
assert pl.Datetime == pl.Datetime(time_unit)
assert pl.Duration == pl.Duration(time_unit)

Чекеры расходятся в том как должна быть написана реализация, но соглашаются в том как API ведёт себя снаружи. А пользователям важно именно это.

Практический совет

✳️ Тесты → запускайте максимум чекеров
✳️ Исходники → выберите один, который вам нравится
✳️ Для строгой проверки → Pyrefly (быстрый, соответствует спецификации)
✳️ Для постепенного добавления типов → mypy в мягком режиме

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст
  • ❤ 6
  • 👍 3
More from @pyproglib
  1. Sep 20, 2026👻 94% токенов уходят не на код Анализ запусков показал: основная часть токенов уходит на…
  2. Sep 19, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  3. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  4. Sep 15, 2026⏱️ Справочник по Big-O в Python Для тех, кто хочет писать не просто работающий, а эффектив…
  5. Sep 14, 2026🤪 Если бы можно было задать один вопрос про AI в разработке — что бы вы спросили? Как выб…
  6. Sep 13, 2026🌸 Вселенная намекает: пора уже начать этот курс С 14 сентября цены в Proglib Academy выра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →