Статические анализаторы: Flake8, Pylint, mypy, Radon — в чём разница?

Flake8 — лёгкий линтер/стайл‑чекер (PEP 8, простые ошибки); Pylint — более «тяжёлый» анализатор качества и стиля кода (code smells, дублирование, метрики); mypy — статический проверяющий типов по аннотациям (type hints); Radon — инструмент для метрик сложности, поддерживаемости и поиска участков кода с избыточной цикломатической сложностью.
Подробный ответ

Все четыре инструмента относятся к статическому анализу, но решают разные задачи и часто используются вместе в пайплайне CI.

Flake8

Flake8 — тонкий слой над pycodestyle, pyflakes и рядом плагинов. Основной фокус:

  • соблюдение стиля кода (PEP 8: отступы, длина строк, пробелы, имена и т.п.);

  • простые ошибки уровня «мертвый импорт», «неиспользуемая переменная», «перекрытие импортов» (частично за счёт pyflakes);

  • богатая система плагинов (командный стандарт оформления, проверка docstring’ов и т.п.).

На практике: Flake8 — дешёвый и быстрый линтер, который почти всегда включают первым в пайплайн.

Pylint

Pylint идёт дальше простого стиля и даёт более глубокий анализ:

  • качество кода: подозрительные конструкции, потенциальные баги, неиспользуемый код;

  • code smells: слишком большие функции/классы, совпадающие фрагменты кода, плохие имена;

  • «оценка» модуля в виде числового рейтинга;

  • более сложные проверки импортов, иерархий и т.п.

Минусы: медленнее Flake8 и даёт много «мнений» из коробки, поэтому его часто конфигурируют под командный стиль или используют точечно.

mypy

mypy — это уже не линтер стиля, а статический проверяющий типов для аннотированного кода:

  • использует аннотации типов (type hints) и модуль typing;

  • ловит несоответствия типов: передача str туда, где объявлен int; неверные возвращаемые типы; несовместимые перегрузки и т.п.;

  • поддерживает строгие режимы, плагинную систему (например, плагины для pydantic, SQLAlchemy).

С точки зрения собеседования важно подчеркнуть: mypy проверяет типы, а не стиль; он не заменяет Flake8/Pylint, а дополняет их.

Radon

Radon специализируется на метриках сложности и качества:

  • цикломатическая сложность функций/методов;

  • поддерживаемость кода (Maintainability Index);

  • подсчёт raw‑метрик (количество строк кода, комментариев и т.п.).

На основе Radon можно искать «горячие точки» — функции c высокой сложностью, которые стоит рефакторить, и отслеживать динамику метрик по проекту.

Хорошая устная формулировка

Flake8 — лёгкий линтер и стайл‑чекер; Pylint — более тяжёлый анализатор качества и стиля; mypy — проверяющий типов поверх аннотаций; Radon — анализатор сложностей и метрик. В живых проектах их обычно комбинируют: Flake8/Pylint для стиля и качества кода, mypy для типов, Radon — для поиска слишком сложных участков и отслеживания поддерживаемости.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге