【抄作业】ImportError :cannot import name xxxxxx ,原博主Activewaste

前情介绍

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

问题分析

一、缺少这个module或者func或者package

        缺少python的各种package的话,就自己pip一下
        根据路径去找,发现是否忘记导入了

二、命名问题

        这个问题也是很难容易解决,找一下路径,对应一下两个name,改一下就行。
        还有可能出现这种情况的是你使用的是别的官方的代码,版本升级,导致这个函数不用了,改成了另一个函数了,这个时候就要百度一下(一般行不通),或者去github搜一搜这个问题,比如我用mmdetection,那我就去这个官方仓库下搜一搜有没有别人也出现这个问题,是不是版本的问题。比如我使用pytorch,那就搜一下pytorch的文档,看有没有这个方法的修改说明。
三、路径问题(重点)
        路径问题一般可能出现这两种:一是路径有问题,路径不完整或者错误导致的;二是路径没问题,是路径之间的访问顺序问题导致的。

        路径有问题的:
        前面加上一个from xxx(你的包名) import XXX(你要导入的文件),然后最好根据这个路径去找找你所要导入的文件是否存在,一般都能解决这个问题。
        路径没问题的:
        一个现象:路径没问题的,一般就是你的各个文件夹之间的导包出现了死锁现象,如果是出现下面这个问题:

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

        另一个现象:如果是出现在多个文件夹之间的引用,然后你在错误信息指定的文件夹中也找到了这个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了。

        解决方法:

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

ps:大家可能每次遇到这个问题,都会跟我一样,都会先网上一搜,然后发现没有一个可以解决的方案,然后又懒得看大篇的错误信息,然后就卡住了。其实每次错误的时候,多看看错误信息,自己跟着捋一捋,还是可以找到解决方案滴!
————————————————
版权声明:本文为CSDN博主「Activewaste」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:

ImportError :cannot import name xxxxxx 的三种类型的解决方法_importerror: cannot import name-CSDN博客文章浏览阅读10w+次,点赞129次,收藏389次。网上关于这种问题的解决方案一大堆,但是绝大多数都是不适用,或者说解决不了问题,我根据别人所遇到的和我自己遇到的,对这个问题整理了一下,希望能解决这个问题。一、缺少这个module或者func或者package缺少python的各种package的话,就自己pip一下根据路径去找,发现是否忘记导入了二、命名问题这个问题也是很难容易解决,找一下路径,对应一下两个name,改一下就行。还有可能出现这种情况的是你使用的是别的官方的代码,版本升级,导致这个函数不用了,改成了另一个函数了,这个时候就要_importerror: cannot import namehttps://blog.csdn.net/qq_41375609/article/details/106981053

 

完结撒花

        心中的彼岸,终有一天会到达 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/217019.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】C++中的String类详解及模拟实现示例

文章目录 string类简介string类的基本用法string类的常用方法string类的优势 string类的模拟实现存储结构头文件string.h源文件string.cpp源文件test.cpp string类简介 string类简介在C编程中,字符串是一种非常常见的数据类型,用于存储文本信息。C标准库…

我的网站服务器被入侵了该怎么办?

最近有用户咨询到德迅云安全,说自己再用的网站服务器遇到了入侵情况,询问该怎么处理入侵问题,有什么安全方案可以解决服务器被入侵的问题。下面,我们就来简单讲下服务器遇到入侵了,该从哪方面入手处理,在预…

全球化需要先搬离中国?中国公司出海不应失去“模式自信”

中国企业出海近期热闹非凡,其中以短剧为代表的文化内容产业和跨境电商产业都吸引了大量关注。例如亚马逊在12月12日公布一组最新数据,亚马逊过去一年销售额超过1000万美金的中国卖家数量,同比增长接近30%。中国跨境电商平台在刚刚过去的“黑五…

机器学习算法应用场景与评价指标

一、应用场景 机器学习的算法选择大部分依赖于具体的问题类型和数据特征。下面是一些典型的场景以及对应的常用算法: 1.二元分类问题 当你的目标变量只有两个类别时,如垃圾邮件过滤(垃圾邮件/非垃圾邮件)、患者疾病诊断&#x…

医院污水处理设备远程监控超标报警解决方案

行业背景 近年来,我国医疗机构建设得到了巨大的发展。根据《2022年我国卫生健康事业发展统计公报》,2022年末,全国医疗卫生机构总数达1032918个。截至2022年10月,根据全国排污许可证管理信息平台,共有 13316家医院核发…

UE引擎 LandscapeGrass 实现机制分析(UE5.2)

前言 随着电脑和手机硬件性能越来越高,游戏越来越追求大世界,而大世界非常核心的一环是植被,目前UE5引擎提供给植被生成的主流两种方式为 手刷植被和LandscapeGrass(WeightMap程序化植被)。当然UE5.3推出新一代PCGFramework 节点程序化生成框…

Halcon reduce_domain和scale_image的作用

在Halcon中,reduce_domain是用于缩小图像域(Image Domain)的操作。 它的作用是通过指定一个感兴趣区域(ROI,Region of Interest),将图像数据限制在该区域内,从而实现对图像进行裁剪…

领导力的3个常见误区,你可能中了其中之一

什么是领导力? 领导力是组织和团队成功的关键。在一个不断变化的商业环境中,理解领导力的本质至关重要。这篇文章将揭示有关领导力的三个常见误解,帮助读者更清晰地认识领导者的角色。 关于领导力的常见误解 人们对领导力的理解经常受到错…

如何使用bash写脚本

本章主要介绍如何使用bash写脚本。 了解通配符了解变量了解返回值和数值运算数值的对比判断语句循环语句 grep的用法是“grep 关键字 file”,意思是从file中过滤出含有关键字的行。 例如,grep root /var/log/messages,意思是从/var/log/me…

在做题中学习(33):只出现一次的数字 II

137. 只出现一次的数字 II - 力扣(LeetCode) 思路: 1.首先想到出现三次的数,它们仨的任意一位都是相同的(1/0) 2.可以发现出现三次的数的某一位和a某一位在所有情况下%3最后的结果都和a的那一位相同&…

【PyTorch】卷积神经网络

文章目录 1. 理论介绍1.1. 从全连接层到卷积层1.1.1. 背景1.1.2. 从全连接层推导出卷积层 1.2. 卷积层1.2.1. 图像卷积1.2.2. 填充和步幅1.2.3. 多通道 1.3. 池化层(又称汇聚层)1.3.1. 背景1.3.2. 池化运算1.3.3. 填充和步幅1.3.4. 多通道 1.4. 卷积神经…

抖店商品卡流量怎么做?附实操玩法解析及案例分享!

我是电商珠珠 在抖店中,我们会看到一些店铺从来都不直播,官方账号的作品很少,但是他的店铺GMV依旧过万。 其实这就是抖音的货架电商所带来的优势,抖音现在主要由两部分组成,一部分是内容场,就是咱们平时刷…

SpringBoot整合MongoDB详解

SpringBoot——整合MongoDB详解 注意: MongoDB默认是本机访问 需要开启远程访问 window修改如下 linux 修改如下 /usr/local/mongodb4/mongodb.conf 详细内容 dbpath/data/mongodb4/mongo #数据文件保存地址 logpath/data/mongodb4/log/mongod.log #日志保存地址…

架构设计系列之基础:初探软件架构设计

11 月开始突发奇想,想把自己在公司内部做的技术培训、平时的技术总结等等的内容分享出来,于是就开通了一个 Wechat 订阅号(灸哥漫谈),开始同步发送内容。 今天(12 月 10 日)也同步在 CSDN 上开通…

mysql字段设计规范:使用unsigned(无符号的)存储非负值

如果一个字段存储的是数值,并且是非负数,要设置为unsigned(无符号的)。 例如: 备注:对于类型是 FLOAT、 DOUBLE和 DECIMAL的,UNSIGNED属性已经废弃了,可能在mysql的未来某个版本去…

AI隆重软件,AI原创文章隆重软件

随着信息量的急剧增加,许多写作者、网站管理员和内容创作者们纷纷感受到了文章降重的压力。原始文本的降重,需要保留关键信息的同时避免重复,这是一项既繁琐又耗时的任务。 改写软件的批量降重功能 147SEO改写软件在降重领域的卓越表现主要体…

常见SSL证书都有哪些格式

常见Web服务软件 常见的Web服务软件,通常都基于OpenSSL和Java两种基础密码库。 Tomcat、Weblogic、JBoss等Web服务软件,一般使用Java提供的密码库。通过Java Development Kit(JDK)工具包中的Keytool工具,生成Java Ke…

android studio 按键点击事件的实现方法

一、onClick属性&#xff1a; 1&#xff09;、在activity_main.xml中设置button的onClick属性&#xff1a; <Buttonandroid:id"id/button"android:layout_width"wrap_content"android:layout_height"wrap_content"android:text"开灯&q…

SpringCloud系列(三)| 集成Nacos注册中心

好了万事具备&#xff0c;接下来我们就开始搭建我们SpringCloud项目。本章节我们先来搭建我们SpringCloud项目框架&#xff0c;然后开发两个服务&#xff0c;把他们注册到Nacos注册中心中。上一章节我们已经介绍了Nacos是可以作为注册中心和配置中心的&#xff0c;这一章节我们…

Linux centos8安装JDK1.8、tomcat

一、安装jdk 1.如果之前安装过jdk&#xff0c;先卸载掉旧的 rpm -qa | grep -i jdk 2.检查yum中有没有java1.8的包 yum list java-1.8* 3.yum安装jdk yum install java-1.8.0-openjdk* -y 4.验证 二、安装tomcat Index of /tomcat 可以在这里选择你想要安装的tomcat版本…