如何解决Ruff检测时`from __future__`导入、模块级文档字符串与普通导入顺序引发的E402错误
如何解决Ruff检测时
from __future__导入、模块级文档字符串与普通导入顺序引发的E402错误 我很多Python文件的开头都是这样的:先导入future模块,再写模块级文档字符串:
from __future__ import annotations """ module level docstring """ from datetime import datetime as DateTime print(DateTime.today())
from __future__导入必须放在文件最顶部,虽然它可以跟在模块级文档字符串后面,但我的一些工具会假设这个导入在第一行非注释/非空行的位置。同时我也希望模块级文档字符串尽量靠前,不要放在一大段导入语句的下面。
用flake8(我通过tox调用)检测这种文件是没问题的。
后来我开始尝试用ruff替代flake8,但运行ruff check检测这类文件时,会得到如下错误:
test.py:8:1: E402 Module level import not at top of file | 6 | """ 7 | 8 | from datetime import datetime as DateTime | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402 9 | 10 | print(DateTime.today()) | Found 1 error.
当我移除future导入,或者移除文档字符串,或者把文档字符串移到future导入之前(或者所有导入语句之后),E402错误就会消失。
我该怎么调整ruff的行为,既能保留「特殊的future导入→模块文档字符串→普通导入」的顺序,又不用屏蔽真正的E402错误(比如导入出现在实际代码之后的情况)?
我知道可以在每个普通模块级导入后面加# NOQA,但我维护的200多个包里有几百个文件,这种方式我不太想用。我也可以修改工具来处理不在文件最顶部的from __future__导入,但我真的不想把这个特殊导入藏在(可能很长的)模块文档字符串下面,尤其是未来可能会有破坏性变更。
备注:内容来源于stack exchange,提问作者Anthon
相关产品推荐
相关产品推荐

