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

VSCode中coverage run报错:ModuleNotFoundError: No module named 'b'

解决终端执行coverage时的ModuleNotFoundError问题

问题原因

VSCode测试面板会自动读取settings.json中指定的.env文件加载PYTHONPATH,但终端默认不会自动加载该文件的环境变量,导致执行coverage命令时,Python无法找到src目录下的模块。

解决方法

方法1:终端手动加载.env后执行命令

根据你的操作系统,在终端先加载.env的环境变量,再执行coverage命令:

  • Linux/macOS(bash/zsh):
    source .env && coverage run --source=./tests,./src,./src/model_manager -m unittest
    
  • Windows CMD:
    for /f "tokens=*" %i in (.env) do set %i
    coverage run --source=./tests,./src,./src/model_manager -m unittest
    
  • Windows PowerShell:
    Get-Content .env | ForEach-Object { if ($_ -match '^([^#]+?)=(.*)') { Set-Item -Path Env:$($matches[1]) -Value $matches[2] } }
    coverage run --source=./tests,./src,./src/model_manager -m unittest
    

方法2:改用相对导入(推荐)

修改src/a.py中的导入语句,从绝对导入改为相对导入,不依赖PYTHONPATH:
将import b改为:

from . import b

这样Python会基于src包的结构查找模块,无论终端还是测试面板都能正常运行测试。注意如果直接运行a.py脚本,需要用python -m src.a而非python src/a.py,但unittest测试不受影响。

方法3:配置VSCode终端自动加载.env

修改.vscode/settings.json,让终端启动时自动加载.env文件,以后每次打开终端都无需手动加载:

  • Linux/macOS:
    "terminal.integrated.profiles.linux": {
      "bash": {
        "args": ["-c", "source ${workspaceFolder}/.env && exec bash"]
      }
    },
    "terminal.integrated.defaultProfile.linux": "bash"
    
  • Windows PowerShell:
    "terminal.integrated.profiles.windows": {
      "PowerShell": {
        "args": ["-NoExit", "-Command", "Get-Content ${workspaceFolder}/.env | ForEach-Object { if ($_ -match '^([^#]+?)=(.*)') { Set-Item -Path Env:$($matches[1]) -Value $matches[2] } }"]
      }
    },
    "terminal.integrated.defaultProfile.windows": "PowerShell"
    

内容的提问来源于stack exchange,提问作者Code Pope

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:17:23