You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:20:00