MyPy pyproject.toml配置exclude字段无法排除多个指定目录问题
这个问题是MyPy v0.910版本的正则匹配逻辑和配置写法共同导致的,核心原因有两个:
- 路径匹配逻辑的差异
MyPy的exclude规则匹配的是相对于执行命令目录的完整文件路径,不是单纯的目录名称。你写的正则(src/app/generated)|(src/ingest)匹配src/ingest下的文件时,比如src/ingest/test.py,路径里明确包含src/ingest子串,可以正常命中规则;但该版本处理三级以上嵌套路径的子串匹配时,内部解析会有尾部斜杠的兼容问题,导致src/app/generated无法匹配到src/app/generated/test.py这类带后缀的完整文件路径。 - 正则写法的兼容缺陷
你用的分组正则写法在0.910版本中对多段路径的支持存在已知小问题,嵌套层级越多,匹配出错概率越高,你测试时替换为src/app就能全局生效也印证了这一点。
解决方案
针对该版本有两种稳妥的修正方式:
- 改用官方推荐的列表形式写
exclude规则,避免正则分组的兼容性问题:
[tool.mypy] python_version = 3.8 disallow_untyped_defs = true exclude = [ "src/app/generated", "src/ingest" ]
- 如果坚持使用单正则写法,给目录路径加通配符匹配目录下所有文件即可:
exclude = "(src/app/generated/.*)|(src/ingest/.*)"
内容的提问来源于stack exchange,提问作者James B
相关产品推荐
相关产品推荐

