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会自动把脚本所在目录添加到python /your/path/root/chapter/test.pysys.path,所有相对导入、本地依赖都能正常识别。 - 默认调试模式的命令(工作目录在root时)类似:
这是试图加载一个名为python -m test.pytest.py的模块,但Python模块系统只识别不带后缀的名称,而且此时sys.path里只有root目录,根本找不到test.py这个模块(实际模块是chapter.test),所以报错。
快速解决办法
修改你的调试配置文件launch.json,让调试环境和直接运行的环境保持一致:
- 打开VS Code的调试面板,点击"创建launch.json文件"(如果还没生成),选择你的Python环境。
- 修改配置,把工作目录设为当前脚本所在的目录:
这样调试时的工作目录就和直接运行时一样了,执行逻辑也会和直接运行一致,就不会再出现模块找不到的问题。{ "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
相关产品推荐
相关产品推荐

