pre-commit执行mypy钩子报模块找不到错误,直接运行mypy却正常
解决pre-commit中mypy找不到模块的问题
问题原因
pre-commit执行mypy时的工作目录是project_dir,而代码中from apps.app2.mod2 import foo的导入逻辑是以src为模块根目录的。此时src不在mypy的模块搜索路径里,导致无法找到apps模块;而手动cd src后执行mypy时,当前目录(src)会被自动加入搜索路径,因此能正常运行。
解决方案
以下三种方法任选其一即可:
方法1:在mypy配置文件中添加pythonpath
编辑.styleconfigs/mypy.ini,添加pythonpath配置:
[python] pythonpath = src
这种方式一劳永逸,不管在哪个目录执行mypy都会生效。
方法2:修改pre-commit钩子的参数
在pre-commit-config.yaml的mypy钩子args中添加--pythonpath=src:
- repo: https://github.com/pre-commit/mirrors-mypy rev: v1.8.0 hooks: - id: mypy args: - --config-file=./.styleconfigs/mypy.ini - --pythonpath=src additional_dependencies: [ "types-requests", "types-python-dateutil", "types-redis", "types-ujson", "types-cachetools", "pydantic==2.5.3" ]
方法3:修改pre-commit钩子的工作目录
将mypy钩子的工作目录改为src,同时调整配置文件的路径:
- repo: https://github.com/pre-commit/mirrors-mypy rev: v1.8.0 hooks: - id: mypy working_directory: src args: - --config-file=../.styleconfigs/mypy.ini additional_dependencies: [ "types-requests", "types-python-dateutil", "types-redis", "types-ujson", "types-cachetools", "pydantic==2.5.3" ]
这种方式让pre-commit执行mypy的环境和手动执行的环境完全一致。
验证
修改完成后,在project_dir目录下执行pre-commit run -a,确认错误消失。
内容的提问来源于stack exchange,提问作者unknown
相关产品推荐
相关产品推荐

