vscode:no module named xxx,no such file or directory xxx

最近(其实好久了)在用vscode运行代码的时候它老是报错no moduleno file或者no directory,我真的气结,明明module就和它一个目录下,明明file的路径没有写错,但是vscode仿佛突然失明就是找不到文件???掐了掐自己的人中反省了一下:软件肯定没问题,肯定是我还没把vscode玩儿明白,所以今天这篇博文就来解开这个谜题。

ps:昨天打开CSDN发现编辑界面竟然和幕布类似,非常愉快地写了这篇blog最后发现这个无法像旧版一样添加目录,并且切不回去旧版==。家人们看着不方便的话,这个锅让CSDN背着(改版很好,下次不要再改了),强行加个目录:


vscode报错分两种情况,一是import报错,二是代码中打开文件(路径)报错,vscode甩锅,不是,报错提示分别如下:

不过,vscode也不总是报错的,也分情况。在具体介绍几种情况之前,我们有必要知道vscode的几种不同运行方式。


vscode内置运行方式

运行方式1:【ctrl+F5】

它和【F5】是相对应的,一个非调试运行,一个调试运行。它俩的本意是刷新页面,不过放在vscode里面作用为:(重启)运行、(重启)调试。

运行方式2:【Run Python File】

它和【Debug Python File】是相对应的,它俩的作用分别和【F5】、【ctrl+F5】对应。

运行方式3:【右键+Run Python File in Terminal】

运行方式4:【在终端运行python命令】

安装code runner插件后

运行方式5:【Run Code】

以上运行方式都是vscode内置的,现在安装code runner这个插件文件运行会有如下不同:

可以看到多了【Run Code】这个选项,它运行后会显示在“输出”这个地方(上面几种方式运行后都是显示在“终端”)

这个时候run code出现了一个问题就是:不管我怎么ctrl+shift+p更改python 解释器,这个run code一直显示的是我第一次使用的python解释器(如上图,我第一次使用run code的时候使用的是服务器虚拟环境pytorch1.6的python解释器,于是run code的解释器一直是这个)。

但是vscode内置的几种运行方式都是随着我ctrl+shift+p实时更改python解释器的。

查阅资料发现run code的python解释器需要自己手动更改,具体方式为:首选项→设置→搜索框搜run code→看下图

下面这个python解释器就会成为run code的python解释器,当然这个-u有没有都行。

而此时我ctrl+shift+p选择的python解释器是:

code runner插件对应的代码运行方式只有【Run Code】,快捷键是【ctrl+alt+n】,但是run code它对应的运行界面是“输出”,但是刚开始我的vscode“输出”界面总是code=1并且还有乱码。

解决方案在这儿https://blog.csdn.net/zhangweijin521/article/details/126554622,我让我的windows克服了一下~

这么说的话,每次更改run code的python解释器都要设置一次settings,这不是更麻烦了吗?
还有我在查阅资料的时候有网友表示必须安装code runner插件才能运行和调试,不过我是没有遇到这种情况。
网址放这儿,有需要大家也可以看看:https://www.zhihu.com/question/289647365。

import报错和文件路径报错

case1:所有文件都在主目录下

互相调用一切顺利,上述5种运行方式都可以正确运行。

case2:主目录文件调用子目录文件

我把cyl_test1.py和hhh.txt分别放入src子文件夹和dir子文件夹。

此时cyl_test2.py对函数yyy的调用需要从src文件夹写起(如果代码自动补全插件/扩展已经安装好了的话,输入src.,vscode会自动弹出src下的所有文件),否则vscode报错说“no module named ‘cyl_test1’”。对于dir/hhh.txt同理,输入dir后vscode会自动弹出hhh.txt

case3:子目录文件调用主目录文件

我把cyl_test2.py和cyl_test3.py都放进src子文件夹,cyl_test1.py和hhh.txt都放到主目录下。

如果按照上图方式写路径:

对于import报错:运行方式1可以正确运行,其余4种运行方式报错ModuleNotFoundError: No module named 'cyl_test1'。

对于文件路径报错:运行方式1和5可以正确运行,运行方式2、3、4报错FileNotFoundError: [Errno 2] No such file or directory: 'hhh.txt'

作如上更改后,

对于import报错:运行方式1-4可以正确运行,运行方式5报错ModuleNotFoundError: No module named 'cyl_test1'。

对于文件路径报错:运行方式2、3、4可以正确运行,运行方式1和5报错FileNotFoundError: [Errno 2] No such file or directory: '../hhh.txt'

sys.path.append对文件路径报错没有影响。

case4:子目录文件调用子目录文件(同一子目录)

对于import报错:运行方式1-5均可以正确运行。

对于文件路径报错:运行方式2、3、4可以正确运行,运行方式1和5报错FileNotFoundError: [Errno 2] No such file or directory: 'hhh.txt'

对test3的路径作如下更改后,对于文件路径报错的情况则反过来了

总结:运行方式为1和5时,vscode默认将 工作区打开文件(工程主目录)作为当前工作目录,所以vscode在根据路径找文件时都是 从主目录开始找的;运行方式为2、3、4时,vscode将运行文件所在目录作为当前工作目录,所以vscode在根据路径找文件时都是 从当前运行文件所在子目录开始找的。

当我把run code的settings改一下同时把文件路径改成“../src/hhh.txt”也是正确的,也即是告诉vscode:现在你找文件就从当前运行文件所在子目录开始找,看到..你就往上走一层再找。(这个也很好理解,因为改的就是code runner插件的settings,所以现在【Run Code】行了是情理之中)

这个时候只有运行方式1不行。我尝试用https://blog.csdn.net/SpaceCoder/article/details/127484313中提到的方法去改vscode默认的cwd,但是【ctrl+F5】和【F5】都不吃这一套。

case5:子目录文件调用子目录文件(不同子目录)

对于import报错:运行方式1-4均可以正确运行,但是运行方式5报错ModuleNotFoundError: No module named 'dir'。

对于文件路径报错:运行方式2、3、4、5可以正确运行,运行方式1仍然傲娇报错(因为它只从主目录开始找文件)

总结:
没有手动设置 vscode的cwd/ Code-runner: File Directory As Cwd的话,运行方式1从主目录开始找文件,运行方式2、3、4 仍然从当前运行文件所在子目录开始找文件, 对于import报错有没有 sys.path.append("..")运行方式5都找不到文件, 对于文件路径报错运行方式5和运行方式1情况相同。
如果设置了上述cwd(设置为${fileDirname}),运行方式1、2、3、4都不变,此时相对路径..和 sys.path.append("..")对运行方式5都有用。
最后,每次加上sys.path.append虽然略显笨重,但是有用!相关内容可以看 https://blog.csdn.net/universe_R/article/details/123370672

其他一些想起来的小tips:

1、下载安装软件的时候一定要把安装路径想清楚再点“安装”,比如一般来说软件都被默认下载安装到C盘了,这样导致C盘很容易爆,所以下次建议把安装路径改到D盘(目前来说没发现和C盘有什么不同)。但是如果忘记了改安装路径那就不要事后去ctrl+x和ctrl+v了,这样会导致软件在后续使用的时候出现更多的问题甚至不能使用(别问我怎么知道的),当然这个时候可以卸载重新安装,但是这不是麻烦嘛,而且要是像visual某studio(博主本科使用的c、c++IDE)这种很难卸干净并且不卸干净无法重新下载安装的软件,那不是一个头两个大嘛。
2、还有就是,一般软件安装的时候都会有“添加到PATH(重启后生效)”这个选项,请给我勾上!你永远不知道哪一天你会用这个软件运行命令行,所以答应我,勾上勾上勾上!
3、如下:

vscode的launch.json文件怎么找:

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值