赞
踩
在学习和使用python import xxx时,无论新手还是老手ModuleNotFoundError异常应该都是会遇到的,特别是在项目更换运行环境或者自建包的时候。本文来简单梳理下导致ModuleNotFoundError异常的一些原因以及解决办法,仅当个人笔记使用。
想要知道导致ModuleNotFoundError的原因及其解决办法,那就得了解import 是如何进行索引的,详情见该文章:python中import的索引机制
导致ModuleNotFoundError的原因各种各样,下面拣一些常见的分析一下(Windows系统)。
import xxx时xxx名字拼写错误导致ModuleNotFoundError的情况出现也比较多,当模块,包名字错误或者不存在时一般编辑器(pycharm)会以红色的下划线提示,如下
解决办法:查找确认模块正确名字后重新import
在copy别人的代码或者网上学习时,有时候别人贴的图或者代码只是部分,以及隐式import,这时我们copy下来运行就有可能抛ModuleNotFoundError异常。
解决办法:
1). 查看有无使用import 导入该模块或包,若没有则使用import导入
2). cmd窗口用pip list查看包是否已经安装,没有则使用pip install xxx安装
3). 检查包版本是否正确,更新包版本(pip install --upgrade xxx) 或者卸载(pip uninstall xxx)重新安装
如果命名不规范,要导入的XXX与已有的模块,包的命名空间冲突,这时也可能导致import异常。
前面的三点异常不难处理,当你有点基础后,遇到更多的是模块或包的路径不在import索引范围内引起的ModuleNotFoundError异常,这也是本次学习的重点。了解import索引机制能够更好更快的解决问题,上面给了import索引机制的文章链接,里面有详细的演示,如果不想看可以看下面的流程图,也可以一目了然。
从上面流程图可以看到当模块或包不是python内置的,路径也不在sys.path列表里面时,import索引就会抛ModuleNotFoundError异常。自建的模块或包不是python内置的,所以我们的解决办法就是:将模块或包的路径添加到sys.path列表中
将模块或包的路径添加到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)
需要注意的是路径添加要在import之前,如下
# -*- coding: utf-8 -*- """ File Name: CSDN Description : Author : admin date: 2022/5/4 """ import sys import os #添加项目路径到sys.path path = os.path.abspath(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))) sys.path.insert(0, path) print("加了之后", sys.path) #添加路径后再import from ModuleAndPackage.pk1 import t1 from ModuleAndPackage.pk2 import t2 t1.t1() t2.t2()
1). 通过环境变量PYTONPATH添加到sys.path
2). 通过.pth文件添加到sys.path
使用该方法时要注意:.pth文件要放在python安装目录下的site-package文件下,一行就代表一个路径。
3). 直接将被引用的模块或包放在第三方模块site-packages下
如果被引用的包或模块是公用的,推荐使用该方法,该方法直接把被引用的模块或包放在第三方模块site-packages下,不需要再做额外的操作。
以上就是解决import时ModuleNotFoundError异常的一些方法,可以根据实际问题环境选择不同的解决方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。