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

VS Code调试Python文件出现"No module named test.py"错误及运行与调试模式差异咨询

Why "No module named test.py" Occurs When Debugging (But Not Running Directly) in VS Code

我之前也踩过这个坑,核心问题出在VS Code的直接运行和调试模式在工作目录、执行逻辑上的本质差异,咱们一一捋清楚:

1. 工作目录(Working Directory)的区别

  • 直接运行时:VS Code默认会把当前打开的脚本文件所在的目录(也就是你的root/chapter)设为工作目录。这时候Python解释器就在这个目录下,直接执行test.py,脚本所在目录会自动被加入sys.path,所以Dash/Flask的依赖、模块导入都能正常找到,运行自然没问题。
  • 调试模式默认配置下:VS Code会把根目录(root)设为工作目录。这时候调试器尝试启动脚本,但如果你的launch.json里用了默认的"program": "${file}",它会试图用模块方式运行脚本——也就是执行python -m test.py,但test.py不是合法的模块名(模块名不能带.py后缀),而且此时工作目录在root,Python找不到名为test.py的模块,就会抛出"No module named test.py"的错误。

2. 执行命令的本质差异

  • 直接运行的实际命令类似:
    python /your/path/root/chapter/test.py
    
    这是直接运行脚本文件的方式,Python会自动把脚本所在目录添加到sys.path,所有相对导入、本地依赖都能正常识别。
  • 默认调试模式的命令(工作目录在root时)类似:
    python -m test.py
    
    这是试图加载一个名为test.py的模块,但Python模块系统只识别不带后缀的名称,而且此时sys.path里只有root目录,根本找不到test.py这个模块(实际模块是chapter.test),所以报错。

快速解决办法

修改你的调试配置文件launch.json,让调试环境和直接运行的环境保持一致:

  1. 打开VS Code的调试面板,点击"创建launch.json文件"(如果还没生成),选择你的Python环境。
  2. 修改配置,把工作目录设为当前脚本所在的目录:
    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Python: Current File",
                "type": "python",
                "request": "launch",
                "program": "${file}",
                "cwd": "${fileDirname}", // 关键:将工作目录设为当前文件所在目录
                "console": "integratedTerminal"
            }
        ]
    }
    
    这样调试时的工作目录就和直接运行时一样了,执行逻辑也会和直接运行一致,就不会再出现模块找不到的问题。

如果你的项目有复杂的包结构,也可以保持工作目录在root,但要把program参数设为完整的脚本路径("program": "${workspaceFolder}/chapter/test.py"),同时确保脚本里的导入路径是基于root的绝对导入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:07:37