介绍
由于vscode和pycharm的目录属性略微不同,不同文件夹下的包进行导入的时候会有所不同,所以特此记录一下
如图想在demo.py中导入utils中的包,这里通常会直接这么进行写
from src.utils.plotting import make_matching_figure
但是这样写在vscode中是会报错的,所以我们先进行探究这是为什么。
原因
首先python中的import各种文件,会在sys.path路径下进行寻找.
我们按照上面进行举例
import os,sys
a=sys.path
这里可以看到a的值如下
['/home/username/lofter/LoFTR/notebooks',
'/home/username/.conda/envs/loftr/lib/python38.zip',
'/home/username/.conda/envs/loftr/lib/python3.8',
'/home/username/.conda/envs/loftr/lib/python3.8/lib-dynload',
'/home/username/.local/lib/python3.8/site-packages',
'/home/username/.conda/envs/loftr/lib/python3.8/site-packages']
这里显示了6个目录,但是这些文件夹下进行搜索的话是搜索不到src文件夹的,src是和她们平行的。
所以,这也就是导致moudle导入失败的原因。所以如何解决这个问题也就显而易见了。
解决方法
sys.path.append('..')
b=sys.path
print(sys.path)
结果
['/home/xujintao/lofter/LoFTR/notebooks',
'/home/xujintao/.conda/envs/loftr/lib/python38.zip',
'/home/xujintao/.conda/envs/loftr/lib/python3.8',
'/home/xujintao/.conda/envs/loftr/lib/python3.8/lib-dynload',
'/home/xujintao/.local/lib/python3.8/site-packages',
'/home/xujintao/.conda/envs/loftr/lib/python3.8/site-packages', '..']
进行添加目录的方式。有一点值得了解的就是在vscode中的工作目录为根你的home,所以用’..'这个的话就是回退到根目录的上一级为根目录,这样可以保证任何的都可以搜多到,而且具有普适性。
这样就基本清楚了。