找回密码
 会员注册
查看: 38|回复: 0

解决pythonimport时ModuleNotFoundError异常

[复制链接]

4

主题

0

回帖

13

积分

新手上路

积分
13
发表于 2024-9-13 10:00:40 | 显示全部楼层 |阅读模式
文章目录前言一import索引机制二ModuleNotFoundError原因及其解决办法1.模块,包名字错误2.模块,包未导入或未安装3.模块,包命名冲突4.模块,包路径不在import索引范围内(常见且重点)前言  在学习和使用pythonimportxxx时,无论新手还是老手ModuleNotFoundError异常应该都是会遇到的,特别是在项目更换运行环境或者自建包的时候。本文来简单梳理下导致ModuleNotFoundError异常的一些原因以及解决办法,仅当个人笔记使用。一import索引机制  想要知道导致ModuleNotFoundError的原因及其解决办法,那就得了解import是如何进行索引的,详情见该文章:python中import的索引机制二ModuleNotFoundError原因及其解决办法  导致ModuleNotFoundError的原因各种各样,下面拣一些常见的分析一下(Windows系统)。1.模块,包名字错误  importxxx时xxx名字拼写错误导致ModuleNotFoundError的情况出现也比较多,当模块,包名字错误或者不存在时一般编辑器(pycharm)会以红色的下划线提示,如下解决办法:查找确认模块正确名字后重新import2.模块,包未导入或未安装  在copy别人的代码或者网上学习时,有时候别人贴的图或者代码只是部分,以及隐式import,这时我们copy下来运行就有可能抛ModuleNotFoundError异常。解决办法:1).查看有无使用import导入该模块或包,若没有则使用import导入2).cmd窗口用piplist查看包是否已经安装,没有则使用pipinstallxxx安装3).检查包版本是否正确,更新包版本(pipinstall--upgradexxx)或者卸载(pipuninstallxxx)重新安装3.模块,包命名冲突  如果命名不规范,要导入的XXX与已有的模块,包的命名空间冲突,这时也可能导致import异常。4.模块,包路径不在import索引范围内(常见且重点)  前面的三点异常不难处理,当你有点基础后,遇到更多的是模块或包的路径不在import索引范围内引起的ModuleNotFoundError异常,这也是本次学习的重点。了解import索引机制能够更好更快的解决问题,上面给了import索引机制的文章链接,里面有详细的演示,如果不想看可以看下面的流程图,也可以一目了然。从上面流程图可以看到当模块或包不是python内置的,路径也不在sys.path列表里面时,import索引就会抛ModuleNotFoundError异常。自建的模块或包不是python内置的,所以我们的解决办法就是:将模块或包的路径添加到sys.path列表中将模块或包的路径添加到sys.path中:要导入的模块,包和运行脚本在同一项目如果要导入的XXX模块或包和运行脚本在同一个项目,那么可以用以下代码将XXX模块或包所属项目的路径添加到sys.path中,注意这里是所属项目的路径,而非模块或包的路径。如下#根据运行脚本向上找到项目路径path=os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))#添加路径到sys.path中#sys.path.append(path)sys.path.insert(0,path)12345需要注意的是路径添加要在import之前,如下#-*-coding:utf-8-*-"""FileName:CSDNDescription:Author:admindate:2022/5/4"""importsysimportos#添加项目路径到sys.pathpath=os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))sys.path.insert(0,path)print("加了之后",sys.path)#添加路径后再importfromModuleAndPackage.pk1importt1fromModuleAndPackage.pk2importt2t1.t1()t2.t2()1234567891011121314151617181920要导入的模块,包和运行脚本不在同一项目  如果要引用的模块,包和运行的脚本不在同一个项目,即引用项目之外的包或模块,那么上面方法就不在适用了。不过我们的宗旨还是要把被引用的包或模块的路径添加到sys.path中。从上面的import索引流程图中可以看出,还有三种方法可以将路径添加到sys.path中,如下1).通过环境变量PYTONPATH添加到sys.path2).通过.pth文件添加到sys.path使用该方法时要注意:.pth文件要放在python安装目录下的site-package文件下,一行就代表一个路径。3).直接将被引用的模块或包放在第三方模块site-packages下如果被引用的包或模块是公用的,推荐使用该方法,该方法直接把被引用的模块或包放在第三方模块site-packages下,不需要再做额外的操作。  以上就是解决import时ModuleNotFoundError异常的一些方法,可以根据实际问题环境选择不同的解决方法。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-26 13:02 , Processed in 0.622129 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表