pre-commit顶层exclude配置不生效?mypy仍检测排除文件夹
问题分析:pre-commit顶层exclude无法屏蔽mypy对指定文件夹的检查
核心原因
- pre-commit顶层exclude的作用局限:它仅负责控制pre-commit是否将排除路径下的文件传递给钩子,但mypy会依据自身配置(比如
mypy.ini中的mypy_path)主动扫描整个src目录,不受pre-commit文件传递逻辑的约束。 - mypy钩子的全量扫描特性:mypy钩子默认执行全量代码检查,而非仅处理pre-commit传入的文件。哪怕pre-commit过滤了目标文件夹,mypy仍会按照自身规则扫描该路径。
解决方案
方案1:在mypy钩子中单独配置exclude
直接在pre-commit的mypy钩子项里添加exclude参数,精准屏蔽目标文件夹:
- repo: https://github.com/pre-commit/mirrors-mypy rev: v0.991 hooks: - id: mypy args: [--strict] exclude: "src/project/proto/" additional_dependencies: [types-protobuf>=4.21.0.0, types-termcolor>=1.1.6, pytest>=7.2.0]
方案2:在mypy.ini中添加排除规则
修改mypy.ini,让mypy自身忽略目标文件夹:
[mypy] python_version = 3.8 mypy_path = ./src:./tests exclude = src/project/proto/ [mypy-lark.*] ignore_missing_imports = True
方案3:强制mypy仅检查传入的文件
通过参数限制mypy只处理pre-commit传递的文件,此方案可能影响导入检查,按需选择:
- repo: https://github.com/pre-commit/mirrors-mypy rev: v0.991 hooks: - id: mypy args: [--strict, --follow-imports=skip] additional_dependencies: [types-protobuf>=4.21.0.0, types-termcolor>=1.1.6, pytest>=7.2.0]
内容的提问来源于stack exchange,提问作者WZH
相关产品推荐
相关产品推荐

