救命被这个问题折磨一晚上,大概总结一下就是:
“带参调试无法正常import上级目录中的文件”
“无法指定调试器的运行目录”
详细说明就是:有这么一个叫 IGD 的模型
程序结构如上,现在想要调试 ssim_main文件,带参数。
官方给的命令行在 IGD 目录下正常运行:
但是调试时总是出现 ModuleNotFoundError: No module named 'Recorder' 的情况,改了很多遍调试的配置文件,失败,最后终于在CSDN一个帖子中找到了答案:
vscode python 无法引入上层目录解决-CSDN博客
最终的调试配置文件如下:
现在可以正常调试了。也就是添加了 cwd 及 env 这两个参数。
另:这个模型中官方给的命令跟之前见过的 python E:\..XX.py 格式不同,使用了 -m 选项,导致我使用绝对路径时出错
根据chatgpt的解释:
-m
是 Python 解释器的一个选项,用于指定要执行的模块。通过使用
-m
选项,你可以在不考虑当前目录的情况下,直接从模块路径中执行指定的模块。这对于直接执行安装在 Python 模块搜索路径中的模块非常有用。使用
-m
选项的一般语法是:python -m module_name [args]
其中,
module_name
是要执行的模块的名称,args
是传递给模块的参数。使用
-m
选项的优点是它能够自动处理模块的路径解析和导入,确保你执行的是正确的模块,而不会因为当前目录或其他因素导致模块解析错误。
也就是我使用绝对路径时,python的搜索路径局限在 .py 文件的当前文件夹?而使用 -m p32.main.py 则搜索路径增加了 IGD,IGD/p32等路径,因此能够搜索到 Record.py。