当前位置:   article > 正文

ImportError :cannot import name xxxxxx 的三种类型的解决方法_importerror: cannot import name

importerror: cannot import name

网上关于这种问题的解决方案一大堆,但是绝大多数都是不适用,或者说解决不了问题,我根据别人所遇到的和我自己遇到的,对这个问题整理了一下,希望能解决这个问题。

一、缺少这个module或者func或者package
  1. 缺少python的各种package的话,就自己pip一下
  2. 根据路径去找,发现是否忘记导入了
二、命名问题
  1. 这个问题也是很难容易解决,找一下路径,对应一下两个name,改一下就行。
  2. 还有可能出现这种情况的是你使用的是别的官方的代码,版本升级,导致这个函数不用了,改成了另一个函数了,这个时候就要百度一下(一般行不通),或者去github搜一搜这个问题,比如我用mmdetection,那我就去这个官方仓库下搜一搜有没有别人也出现这个问题,是不是版本的问题。比如我使用pytorch,那就搜一下pytorch的文档,看有没有这个方法的修改说明。
三、路径问题(重点)

路径问题一般可能出现这两种:一是路径有问题,路径不完整或者错误导致的;二是路径没问题,是路径之间的访问顺序问题导致的。

  1. 路径有问题的:
    前面加上一个from xxx(你的包名) import XXX(你要导入的文件),然后最好根据这个路径去找找你所要导入的文件是否存在,一般都能解决这个问题。
  2. 路径没问题的:

一个现象:路径没问题的,一般就是你的各个文件夹之间的导包出现了死锁现象,如果是出现下面这个问题:
在这里插入图片描述
解决方法:只在两个文件之间的死锁,建议是把要导入的函数或者模块写进第三个文件中,两个文件的死锁现象是解决不了的,捋清一下谁依赖谁,谁又依赖谁,然后分开写,如果不明白的话,看下面我自己遇到的问题,和我对其错误信息的分析,然后自己把他们分开来写。

另一个现象:如果是出现在多个文件夹之间的引用,然后你在错误信息指定的文件夹中也找到了这个module,但是就是import不到的现象:
下面是我在mmdetection上跑实验的时候报错的截图:
在这里插入图片描述
分析:我在mmdet.core文件夹下的一个文件中是有eval_recalls的函数的,也就是路径没问题,命名也没问题,那就是import的循序出现了问题,造成了import追尾现象(死锁),具体分析如下。
如上图所示,我在mmdet.core中import eval_recalls,但是导不进去,于是我看前面的错误信息中,也访问了mmdet.core, init.py文件,然后直接跳到文件夹evalution的init下了(eval_recalls函数在core/evalution下的recall.py文件下)
在这里插入图片描述
在这里插入图片描述
init文件夹的作用是将该文件下所有的包引入,所以访问完init,就会挨个将各个文件夹的文件导入内存中,
看上图,在evaluation文件夹先访问了_init_.py,也就是将文件下所有文件导入内存,错误信息中,evaluation/init.py中又去访问了eval_hooks.py文件
在这里插入图片描述
我们看一下evaluation下的_init_.py文件:
在这里插入图片描述
所以,在程序执行到第三行的时候,跳到了eval_hooks里面了,并没有将recall文件中的module导入到内存。
然后运行到coco.py的时候,这时执行:from mmdet.core import eval_recalls的时候
在这里插入图片描述
又去core的文件中导入,这时又要init吧。init后又要evaluation的init吧,然后到了evaluation/_init_.py的时候,开始导包了吧,然后到第三行是不是又要导eval_hooks的包了????这时候不就出现了死锁现象???死循环了,所以程序在这一步就import不到name ‘eval_recalls’ 这个module了。
在这里插入图片描述
解决方法:

  1. 全路径,在导入eval_recalls的时候,from的时候,把路径写全,具体导eval_revalls的文件,则这样就无须经过多层的import,导致出现死循环的问题。改写成from mmdet.core.evaluation.recall import eval_recalls
  2. 找到死循环的问题所在,换import的顺序,比如下图:更换两行的import顺序,这个问题不能保证没有接下去的问题,因为换了后,可能又会导致其他死循环存在,不过,实在没办法也得试试呀
    在这里插入图片描述

ps:大家可能每次遇到这个问题,都会跟我一样,都会先网上一搜,然后发现没有一个可以解决的方案,然后又懒得看大篇的错误信息,然后就卡住了。其实每次错误的时候,多看看错误信息,自己跟着捋一捋,还是可以找到解决方案滴!


更新2021.10.13

有大半年没有更新博客了,这段时间一直准备春招,实习,秋招,到今天基本上可以结束坐等开奖了;
目前手里有近10个CV算法工程师意向书:字节,商汤,百度,顺丰,华为,小红书,拼多多,小马智行,海康威视,腾讯等
接下来会花很多时间在小红书上整理这一过程所有的经验以及技巧,包括:丰富简历内容,如何打比赛(大佬止步),如何刷题,刷什么题,刷到什么程度,面试技巧,面经整理,hr面技巧,如何反问面试官,如何argue薪资等等等,大家有需要可以关注一波哈,内容保证丰富!助力大家秋招收割offer到手软!
小红书号:371845174(Activewaste,博客同名)

后面也会在小红书分享好用工具,插件,装逼神器等,手把手教学,大家关注起来哈!
另外我比较少上csdn,大家给我私信要联系方式或者评论问问题有时没看到(一个月没上,200+的通知),大家直接去小红书私信提问,或者催我撒!

在这里插入图片描述

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号