跳到内容

unused-import (F401)

派生自 Pyflakes 代码检查器。

有时提供修复。

作用

检查未使用的导入。

为什么这不好?

未使用的导入会在运行时增加性能开销,并有创建导入循环的风险。它们还会增加阅读代码的认知负担。

如果使用 import 语句来检查模块的可用性或存在性,请考虑使用 importlib.util.find_spec 代替。

如果使用 import 语句将符号作为模块公共接口的一部分重新导出,请考虑使用“冗余”导入别名,这会指示 Ruff(和其他工具)尊重重新导出,并避免将其标记为未使用,例如:

from module import member as member

或者,您可以使用 __all__ 将符号声明为模块接口的一部分,例如:

# __init__.py
import some_module

__all__ = ["some_module"]

修复安全性

删除未使用导入的修复是安全的,但在 __init__.py 文件中除外。

将修复应用于 __init__.py 文件目前处于预览阶段。提供的修复取决于未使用导入的类型。Ruff 将建议使用冗余别名或(如果已存在于文件中)__all__ 条目来导出第一方导入的安全修复。如果存在多个 __all__ 声明,Ruff 将不会提供修复。Ruff 将建议删除第三方和标准库导入的不安全修复——修复是不安全的,因为模块的接口会发生更改。

示例

import numpy as np  # unused import


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

建议改为

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

要检查模块的可用性,请使用 importlib.util.find_spec

from importlib.util import find_spec

if find_spec("numpy") is not None:
    print("numpy is installed")
else:
    print("numpy is not installed")

预览

启用 preview 后,用于确定导入是否为第一方的标准更加严格,这可能会影响建议的修复。有关更多详细信息,请参阅 此常见问题解答部分

Options (选项)

参考