pdm
,每个项目都有自己的.venv
。使用 mypy
时,我需要像 Windows 上的 mypy --python-executable ./.venv/Scripts/python.exe .
或 Linux 上的 mypy --python-executable ./.venv/bin/python .
一样指定 venv。
现在我想使用
pre-commit
并将 mypy
放入挂钩中。我写
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.11.1
hooks:
- id: mypy
这样,我无法提交任何代码,因为我会在
mypy
中失败,因为我没有指定venv。所以我必须
rev: v1.11.1
hooks:
- id: mypy
args: ["--python-executable", "./.venv/Scripts/python"]
在我的 Windows 计算机上。 现在一切都很顺利,但我立即意识到在linux上会失败,因为没有
.venv/Scripts/python
而是.venv/bin/python
。
那么,我应该如何在预提交跨平台中使用 mypy 呢?
你有点错过了这里预提交的要点(它的目的是为你配置和管理你的环境,这样你的贡献者就不必经历 N 个咒语来让 linting 工作)——也许
mypy
就像钩子不太适合您的用例。
你可能会更好地使用
language: system
(并且只需直接调用你的virtualenv的mypy
),但这显然是不受支持的领域(取决于正在测试的存储库的安装状态——因为它是未配置的)
另一个想法是编写一个脚本来为您处理平台差异(使用
entry: ./your-script
)——但这仍然会对您的贡献者造成伤害,因为他们必须正确手动设置 ./.venv
才能运行棉绒
在您的情况下,最好不通过预提交使用mypy - 或通过
additional_dependencies
管理所有类型的依赖项
免责声明:我写了预提交