为什么pre-commit运行mypy检测Django REST Framework项目时报错?
问题根因
pre-commit的每个钩子运行时都会使用独立的隔离虚拟环境,和你本地的全局环境、项目虚拟环境完全隔绝,你本地安装的依赖不会被pre-commit的钩子读取。
你配置的mypy钩子的additional_dependencies字段仅添加了djangorestframework-stubs、django-stubs这类类型桩库,没有添加实际运行需要的djangorestframework、django依赖,导致mypy的django插件加载项目配置、初始化Django环境时,找不到rest_framework包触发报错。
修复方法
- 修改
.pre-commit-config.yaml中mypy钩子的additional_dependencies配置,补充实际依赖,建议指定和你项目一致的版本号避免兼容问题:
- repo: https://github.com/pre-commit/mirrors-mypy rev: 'v0.910' hooks: - id: mypy args: [--no-strict-optional, --ignore-missing-imports] exclude: "[a-zA-Z]*/[a-zA-Z]*/(migrations)/(.)*" additional_dependencies: [ 'tokenize-rt', 'djangorestframework-stubs', 'django-stubs', 'django', 'djangorestframework' ]
- 清理pre-commit的旧缓存,重新执行检查:
# 清理已缓存的钩子环境 pre-commit clean # 重新运行全量检查 pre-commit run --all-files
内容的提问来源于stack exchange,提问作者Alipqb
相关产品推荐
相关产品推荐

