Зарегистрируйтесь, чтобы продолжить обучение

Линтинг Python: Настройка окружения

У кода есть множество разных характеристик, по которым можно судить, насколько хорошо он написан. Среди них есть одна базовая, с которой начинают все разработчики — это стиль написания.

Сравните два варианта оформления кода:

## Без форматирования
def  find_sum(a,b):
  c = a+b; return c

## С форматированием
def find_sum(a, b):
  sum = a + b
  return sum

Второй вариант читается значительно проще. Чем больше будет кода, тем больше будет различий. Хороший стиль кодирования — базовое требование к коду в коммерческой разработке, потому что он упрощает командную разработку. В одном проекте может работать несколько десятков программистов. Важно, чтобы им было легко читать код друг друга, не спотыкаясь о неправильное форматирование.

Для отслеживания подобных ситуаций существуют линтеры — особый класс программ. Линтеры содержат большое количество правил, по которым они могут выдать рекомендации по коду. Другими словами, они подсказывают, как стоит писать код, а как — не стоит. Более того, часто линтеры расширяются плагинами под конкретные фреймворки, что позволяет отслеживать специфичные ошибки и давать рекомендации по кодированию в этих фреймворках.

В Python в последнее время особой популярностью пользуется линтер ruff. Количество правил, по которым он проверяет код, исчисляется десятками. Посмотрите на этот небольшой участок кода:

from math import sqrt


def sum(a, b):
    c = 5
    return a + b

С точки зрения форматирования здесь все хорошо, а что скажет линтер?

  • F401 'math.sqrt' imported but unused. Модуль импортируется, но не используется — либо он не нужен, либо в коде есть ошибка
  • F841 local variable 'c' is assigned to but never used. Переменная не используется — либо она не нужна, либо в коде ошибка

Ссылки выше ведут на страницы конкретных правил. Там подробно объясняется, почему так код писать не нужно. Изучать правила линтеров очень полезно, они прививают хорошие практики написания кода.

Установка и настройка ruff

Линтер ruff устанавливается как dev зависимость прямо в проект:

uv add --dev ruff

После установки его можно настроить под набор ваших правил и ограничений. Для этого нужно создать файл конфигурации ruff.toml, который нужно добавить в репозиторий. Ниже пример такого файла, который используется для настройки линтера в наших практиках:

line-length = 80

[lint.per-file-ignores]
  # init modules can contain the local imports, logic, unused imports
"__init__.py" = ["F401"]

[lint]
preview = true
select = ["E", "F", "I", "C90"]

Выше настраивается максимальная длина строчки кода, какие файлы не нужно проверять линтером или какие правила можно игнорировать. Также в поле select перечисляются группы, используемых правил.

Наборы правил, которыми пользуются линтеры, называют стилевым стандартом или стайлгайдом. В Python самый первый стайлгайд был описан в документе PEP8. С тех пор язык сильно вырос, стал использоваться в продакшене и приобрел множество новых фич. Потому появилось много расширений правил PEP8, добавляющих новые проверки. Современные линтеры используют наборы разных групп правил. Наиболее частые это "E", "F", "I" и "C90". Вы можете почитать какие проверки они добавляют на странице правил.

Наконец, последний шаг — запуск ruff:

# Обратите внимание на точку
# Это указание текущей директории и всех поддиректорий
uv run ruff check .

Если ошибок нет, то ruff молча завершит свою работу. Если ошибки есть, линтер выведет список с указанием того, что нужно поправить.

Кроме нахождения ошибок ruff может их исправлять. По крайней мере те ошибки, которые могут быть исправлены с гарантией сохранения работоспособности. Для этого нужно добавить флаг --fix в запуск:

uv run ruff check --fix .

Самостоятельная работа

  1. Установите ruff в ваш проект
  2. Создайте файл конфигурации и скопируйте в него настройки из нашего эталонного репозитория
  3. Запустите линтер на файлах проекта, исправьте замечания
  4. Если вы сохраняли код на GitHub, то отправьте изменения и ruff.toml в репозиторий

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Программирование на Python, Разработка веб-приложений и сервисов используя Django, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»