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

如何配置VSCode调试器以正确执行DeepEval单元测试包?

问题描述

在VSCode中使用调试器运行DeepEval执行LLM单元测试时,出现deepeval包执行错误,具体信息如下:

$  /usr/bin/env C:\Users\myuser\anaconda3\envs\myenv\python.exe c:\Users\myuser\.vscode\extensions\ms-python.debugpy-2024.6.0-win32-x64\bundled\libs\debugpy\adapter/../..\debugpy\launcher 54604 -- C:\Users\myuser\OneDrive\Desktop\Coding\Project/langchain_env/run_deepeval.py test run C:\Users\myuser\OneDrive\Desktop\Coding\Project/tests/test_output_generation.py 

C:\Users\myuser\anaconda3\envs\myenv\lib\site-packages\deepeval\__init__.py:42: UserWarning: You are using deepeval version 0.21.43, however version 0.21.45 is available. You should consider upgrading via the "pip install --upgrade deepeval" command.
  warnings.warn(
C:\Users\myuser\anaconda3\envs\myenv\python.exe: No module named deepeval.__main__; 'deepeval' is a package and cannot be directly executed

当前launch.json配置:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Deepeval",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/langchain_env/run_deepeval.py",
            "args": [
                "test",
                "run",
                "${workspaceFolder}/tests/test_${fileBasename}"
            ],
            "debugStdLib": true,
            "justMyCode": true
        }
    ]
}

已完成的前置操作:

  • 确认DeepEval已安装在虚拟环境myenv中;
  • 验证VSCode的Python解释器已切换至该虚拟环境;
  • 创建了包装脚本run_deepeval.py:
import sys
import subprocess

def main():
    command = [sys.executable, "-m", "deepeval"] + sys.argv[1:]
    result = subprocess.run(command, capture_output=True, text=True)
    print(result.stdout)
    print(result.stderr)

if __name__ == "__main__":
    main()

需要解决的问题:如何配置VSCode调试器以正确执行DeepEval?当前launch.json是否存在问题,或有更优配置方式?

解决方案

1. 修正包装脚本逻辑

当前包装脚本使用-m deepeval调用模块,但DeepEval的CLI入口并非通过该方式实现,导致deepeval.__main__不存在的错误。同时,subprocess.run的capture_output会隔离子进程IO,不利于调试。修改脚本如下:

import sys
import subprocess
from shutil import which

def main():
    deepeval_path = which("deepeval")
    if not deepeval_path:
        print("Error: deepeval not found in PATH", file=sys.stderr)
        sys.exit(1)
    
    command = [deepeval_path] + sys.argv[1:]
    result = subprocess.run(command)
    sys.exit(result.returncode)

if __name__ == "__main__":
    main()

2. 简化launch.json配置(无需包装脚本)

直接配置VSCode调用DeepEval的可执行文件,避免中间脚本的干扰:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Deepeval Test",
            "type": "python",
            "request": "launch",
            "program": "${env:VIRTUAL_ENV}/Scripts/deepeval.exe",
            "args": [
                "test",
                "run",
                "${workspaceFolder}/tests/test_${fileBasename}"
            ],
            "debugStdLib": false,
            "justMyCode": false,
            "python": "${env:VIRTUAL_ENV}/python.exe"
        }
    ]
}

Linux/macOS环境下,将program路径改为${env:VIRTUAL_ENV}/bin/deepeval。

3. 升级DeepEval版本

根据错误提示,先执行版本升级以确保兼容性:

pip install --upgrade deepeval

4. 调试自定义测试代码的配置

若需调试测试文件(如test_output_generation.py)中的逻辑,可直接基于pytest配置调试(DeepEval底层依赖pytest):

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug Deepeval Tests",
            "type": "python",
            "request": "launch",
            "module": "pytest",
            "args": [
                "${workspaceFolder}/tests/test_${fileBasename}",
                "-xvs"
            ],
            "env": {
                "DEEPEVAL_RUN_TEST": "1"
            },
            "justMyCode": false
        }
    ]
}

此配置可直接命中测试代码中的断点,便于调试自定义逻辑。

内容的提问来源于stack exchange,提问作者edge selcuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:13:10