如何忽略 Pyflakes 错误 'imported but unused' 在 '__init__.py' 文件中?

68

我将我的测试分散在多个 Python 文件中:

tests
├── __init__.py
├── test_apples.py
└── test_bananas.py.py

我在'__init__.py'文件中导入了测试:

from test_apples import ApplesTest
from test_bananas import BananasTest

然而在命令行上运行Pyflakes:

pyflakes .

输出以下错误:

tests/__init__.py:1: [E] PYFLAKES:'ApplesTest' imported but unused
tests/__init__.py:2: [E] PYFLAKES:'BananasTest' imported but unused

4
这不是错误,只是提醒你有未使用的导入。这没什么问题。 - DrTyrsa
6个回答

119
为了忽略“__init__.py”文件中所有F401错误(“已导入但未使用”),自Flake8(一个更好的Pyflakes)3.7.0版本以来可用的选项‘per-file-ignores’非常方便。它可以在命令行上使用:
flake8 --per-file-ignores="__init__.py:F401" .

或者在配置文件中(‘.flake8’、‘setup.cfg’或‘tox.ini’):

[flake8]
per-file-ignores = __init__.py:F401

11
这个解决方案很受欢迎,因为它的范围非常明确:一个文件类型中只有一个问题。将以下代码片段添加到.flake8rc中,就可以完美运行了。[flake8] per-file-ignores = __init__.py:F401 - Nomen Nescio
1
我在VS Code设置中遇到了一些引号问题。以防万一,引号需要进行转义,如下所示:"python.linting.flake8Args": [ "--per-file-ignores=\"__init__.py:F401\"" ], - Rafael Zayas
3
在VSCode的Flake Args中运行得非常好,只需将--per-file-ignores="__init__.py:F401"粘贴到那里,就可以轻松搞定。 - Julio Cezar Silva
1
Python > Linting > Flake8 Args > 添加项目在 vscode 中,不带引号的 per-file-ignores = __init__.py:F401 可以正常工作 :) - David Mendes
2
多年前我第一次点赞这个回复,如今我真希望能再次点赞。 - Rafael Zayas
显示剩余2条评论

18
有时候你需要跳过一行。
根据当前版本的文档(flake8 2.4.1),包含

的文件。
# flake8: noqa

被跳过了。这行得通,而#noga,#pyflakes.ignore 不行。


12
在我的版本中使用了 PyFlakes (0.7.3), 使用 __all__ 是有效的。此外,为了跳过一行,你应该添加 # noqa

4
如果您不确定__all__是什么意思,请参阅此帖子:https://dev59.com/PV0Z5IYBdhLWcg3wxCuQ#49266468 - Chris
1
__init__.py 中只进行显式导入时,使用 __all__ 有意义吗? - pabouk - Ukraine stay strong

6

在你的代码行末尾添加# noqa: F401F401是这个错误的代码)

例如:from django.utils import http # noqa: F401


2

导入被解释为未使用,是因为您的linting工具不理解它的使用方式。

最全面的解决方法是确保这些名称清楚地从您的模块中导出。可以通过设置__all__(一种详尽列举导出名称的机制)或使用as为导入指定显式导出名称来实现。

from test_apples import ApplesTest as ApplesTest

然而,我通常建议使用测试运行器来扫描测试用例,而不是全部导入,因为这样可以更有信心地确保运行了所有的测试。


1
在 PEP 484 和 pyright 中,冗余的 from foo import x as x 导入是推荐的解决方案。 - Janosh

-7

在每一行你想要忽略的地方(例如导入语句),添加# pyflakes.ignore注释。


@user1004669 这是正常现象。因为你在 __init__.py 中有导入语句,但是在该文件中没有使用它们,这就是 PYFLAKES 给出的提示。现在需要你自己决定如何处理。这里并不存在问题,所以你不需要做任何事情。如果你仍然有疑问,请查看任何一个知名项目,我敢肯定你会得到相同的信息。 - DrTyrsa
12
@DrTysa 发来的消息很烦人,分散了编写良好代码的注意力。它们还使得从 pyflakes 中看到实际有用的消息更加困难。 - Juan Enrique Muñoz Zolotoochin
14
不确定为什么这被标记为正确答案,语句 # pyflakes.ignore 没有起作用。 - maksimov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接