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

如何在跨平台场景下通过pre-commit使用指定虚拟环境的mypy?

跨平台配置pre-commit + mypy(PDM虚拟环境)

方案一:利用PDM自动管理虚拟环境(推荐)

直接通过pdm run调用项目虚拟环境中的mypy,无需手动区分系统路径。在项目的.pre-commit-config.yaml中添加本地钩子:

repos:
  # 保留其他已配置的钩子...
  - repo: local
    hooks:
      - id: mypy
        name: mypy
        entry: pdm run mypy .
        language: system
        types: [python]
        pass_filenames: false

说明:

  • pdm run会自动识别当前项目的.venv虚拟环境,无论Windows还是Linux,都能正确调用对应环境的Python解释器和mypy。
  • language: system表示使用系统环境中的PDM(需确保PDM已全局安装并配置到环境变量)。
  • 若需要只校验本次提交的文件,可将pass_filenames改为true,并把entry调整为pdm run mypy(让pre-commit自动传递提交的文件名)。

方案二:动态判断系统路径(自定义脚本)

如果不想依赖PDM全局调用,可编写简单脚本自动识别系统路径后调用mypy:

  1. 在项目根目录创建scripts/mypy_runner.py:
import os
import subprocess
import sys

# 根据系统确定虚拟环境Python路径
if sys.platform == "win32":
    venv_python = os.path.join(".venv", "Scripts", "python.exe")
else:
    venv_python = os.path.join(".venv", "bin", "python")

# 调用mypy并传递输出
subprocess.run(
    ["mypy", "--python-executable", venv_python, "."],
    check=True,
    stdout=sys.stdout,
    stderr=sys.stderr
)
  1. 在.pre-commit-config.yaml中配置本地钩子:
repos:
  # 保留其他已配置的钩子...
  - repo: local
    hooks:
      - id: mypy
        name: mypy
        entry: python scripts/mypy_runner.py
        language: system
        types: [python]
        pass_filenames: false

说明:

  • 脚本通过sys.platform判断当前系统,自动匹配虚拟环境的Python路径。
  • 需确保项目虚拟环境中已安装mypy,可通过pdm add -d mypy添加为开发依赖。

注意事项

  • 确保项目根目录存在.venv虚拟环境,可通过pdm venv create创建。
  • 使用方案一时,需保证PDM已在系统环境中可用(Windows需配置环境变量,Linux需确保PDM在PATH路径中)。

内容的提问来源于stack exchange,提问作者Chuang Men

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:58:26