今天在使用 vs code 运行 python 准备导入上级目录中的一个文件时,发现总是会报错
ImportError: No module named *
import sys
sys.path.append("..")
from demo1.a1.three import *
test()
同样的一段代码,在 pycharm 上可以正常运行,但是在 vscode 中却会报错
百思不得其解,博客翻找了半天,终于发现原来是 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 文件
默认的 python 配置并没有配置 cwd ,这个变量默认设置的是 workspaceFolder,所以这时候就需要我们将它手动改成 fileDirname
这时候就可以正常导入模块了
2)使用 code——runner 插件
如果使用的是 code——runner 插件来运行python,我们需要在 setting.json 全局设置中添加一行代码
看名字就知道,其实原理和编辑 launch.json 是相同的,这样运行起来环境就是当前运行文件的路径了