VScode python导入上级目录坑

今天在使用 vs code 运行 python 准备导入上级目录中的一个文件时,发现总是会报错

ImportError: No module named *
import sys
sys.path.append("..")
from demo1.a1.three import * 
test()

同样的一段代码,在 pycharm 上可以正常运行,但是在 vscode 中却会报错
VScode python导入上级目录坑

百思不得其解,博客翻找了半天,终于发现原来是 vs code 的一个暗坑如下
目录结构

.
├── at
│   └── views.py
├── demo1
│   └── a1
│       └── three.py
├── demo2
│   └── two.py
└── one.py

我想做的是在 at 目录中的 view.py 文件中导入 demo1/a1 目录下的 three 模块,使用其test函数
问题原因
为什么会报错呢?既然在 pycharm 上可以正常运行,那么说明我的代码是没有问题的,问题只能出在 vs code 上!所以一定是 vs code 对于python的目录设置出了问题
vs code里面,在工程子文件夹下面 os.getcwd() 返回的不是当前路径,而是当前工程路径(就是.vscode文件夹路径)。
所以,使用sys.path.append()代码并不能正确地设置目录,因为vscode相对的路径就不正确呀! 所以自然也就找不到模块了。
解决方式
1)编辑 launch.json 文件
如果使用的是 VS code 自带的运行器,我们就需要自己来配置launch.json 文件
VScode python导入上级目录坑

默认的 python 配置并没有配置 cwd ,这个变量默认设置的是 workspaceFolder,所以这时候就需要我们将它手动改成 fileDirname
VScode python导入上级目录坑

这时候就可以正常导入模块了
2)使用 code——runner 插件
如果使用的是 code——runner 插件来运行python,我们需要在 setting.json 全局设置中添加一行代码
VScode python导入上级目录坑

看名字就知道,其实原理和编辑 launch.json 是相同的,这样运行起来环境就是当前运行文件的路径了

上一篇:VS 使用cmd命令编译


下一篇:kafka启动失败:Error: VM option 'UseG1GC' is experimental and must be enabled via -XX:+UnlockEx