Ruff unused-import (F401)

unused-import в Ruff проверяет наличие неиспользуемых импортов.

Почему это неправильно

Неиспользуемые импорты создают лишнюю нагрузку на производительность во время выполнения и могут привести к возникновению циклических зависимостей. Они также усложняют чтение кода.

Если оператор import используется для проверки доступности модуля, вместо этого используйте importlib.util.find_spec.

Если импорт предназначен для реэкспорта символа в составе публичного API модуля, используйте "избыточное" алиасное имя, чтобы Ruff и другие инструменты не помечали его как неиспользуемый:

from module import member as member

Альтернативно, можно объявить символ как часть интерфейса модуля, используя __all__:

# __init__.py
import some_module

__all__ = ["some_module"]

Безопасность исправлений

Удаление неиспользуемых импортов безопасно, за исключением файлов __init__.py.

Применение исправлений в __init__.py пока находится в режиме предварительного просмотра. Тип предлагаемого исправления зависит от типа неиспользуемого импорта. Ruff предложит безопасное исправление для экспорта импортов первого уровня с помощью избыточного алиаса или добавления в __all__, если такая декларация уже есть в файле. Если в файле присутствует несколько объявлений __all__, исправление не будет предложено. Для сторонних и стандартных библиотек Ruff предложит небезопасное исправление в виде удаления импорта, поскольку это изменит интерфейс модуля.

Пример ошибки

import numpy as np  # неиспользуемый импорт

def area(radius):
    return 3.14 * radius**2

Как правильно

def area(radius):
    return 3.14 * radius**2