配置Flake8使用本地仓库插件遇加载失败问题求助
问题
尝试在同一仓库中添加自定义Flake8插件,按官方文档及相关内容操作后失败,报错:
flake8.exceptions.FailedToLoadPlugin: Flake8 failed to load plugin "local" due to No package metadata was found for plugin.plugin.
仓库结构:
.flake8 dev-scripts(在此目录通过poetry创建的虚拟环境运行flake8) flake8-plugin plugin __init__.py plugin.py(包含Plugin类)
已尝试在flake8-plugin文件夹添加setup.py,但无效果,因配置中使用local-plugins项,故认为无需setup.py。
.flake8配置片段:
... [flake8:local-plugins] # 代码('MR')必须与插件生成的错误ID前缀匹配,否则不会上报任何内容: extension = MC = plugin.plugin:Plugin paths = ./flake8-plugin/
plugin.py中Plugin类核心代码:
... class Plugin: name = __name__ version: str = importlib.metadata.version(__name__) def __init__(self, tree: ast.AST): self._tree = tree def run( self, ) -> typing.Generator[tuple[int, int, str, type[object]] , None, None]: visitor = Visitor() visitor.visit(self._tree) for line, col, msg in visitor.errors: print("error", flush=True) yield line, col, msg, type(self)
环境信息:
- flake8版本:5.0.4
- Python版本:Linux系统下的CPython 3.10.6
问题排查与解决
1. 版本获取方式错误
报错核心原因是importlib.metadata.version(__name__):该方法需要从已安装的包元数据中读取版本,但本地插件未通过pip安装,不存在包元数据。
解决方法:直接硬编码版本号,替换为:
version: str = "0.1.0" # 自定义版本号
2. 本地插件路径配置错误
因在dev-scripts目录运行flake8,配置中的paths = ./flake8-plugin/会指向dev-scripts/flake8-plugin/,但实际插件目录在上级目录,路径不匹配。
解决方法:修改.flake8中的paths为相对上级目录的路径:
paths = ../flake8-plugin/
3. 验证插件目录的Python模块结构
确保flake8-plugin/plugin/__init__.py存在(即使为空),保证plugin能被识别为Python模块。
4. 运行flake8时的工作目录验证
在dev-scripts目录运行flake8时,可先执行ls ../flake8-plugin/plugin/确认路径是否正确,避免因工作目录导致的路径问题。
按以上步骤调整后,重新运行flake8即可加载本地插件。
内容的提问来源于stack exchange,提问作者user3552
相关产品推荐
相关产品推荐

