GitHub Action执行pre-commit的mypy时遇types-pkg-resources安装失败
解决pre-commit中mypy v1.4.1搭配types-all的依赖安装失败问题
问题原因
types-all是一个聚合类型包,会自动拉取所有已发布的Python类型stub包的最新版本。近期types-pkg-resources发布了新版本,但mypy v1.4.1的依赖约束无法兼容该版本,导致pip在尝试满足所有依赖要求时找不到匹配的types-pkg-resources版本,最终安装失败。
解决方案
1. 锁定types-pkg-resources到兼容版本
直接在mypy钩子的额外依赖中指定兼容的types-pkg-resources版本(比如报错提示的0.1.3),覆盖types-all的自动版本选择:
repos: - repo: https://github.com/pre-commit/mirrors-mypy rev: v1.4.1 hooks: - id: mypy additional_dependencies: - types-all - types-pkg-resources==0.1.3
2. 升级mypy到兼容新版本的版本
如果项目允许,将mypy钩子的版本从v1.4.1升级到更高版本(比如v1.5.1及以上),新版本的mypy已经适配了更新的types-pkg-resources版本:
repos: - repo: https://github.com/pre-commit/mirrors-mypy rev: v1.5.1 hooks: - id: mypy additional_dependencies: - types-all
3. 替换types-all为项目实际需要的类型包
types-all会安装大量不必要的类型包,不仅容易引发依赖冲突,还会增加安装时间。建议只安装项目实际用到的依赖对应的types包,比如用到requests就安装types-requests,用到pandas就安装types-pandas,从根源减少冲突概率。
临时快速修复
如果需要紧急恢复GitHub Action的运行,可以在执行pre-commit命令前手动安装兼容版本:
pip install types-pkg-resources==0.1.3 poetry run pre-commit run --all-files
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

