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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:31:05