当前位置:   article > 正文

解决python import时ModuleNotFoundError异常

modulenotfounderror

前言

  在学习和使用python import xxx时,无论新手还是老手ModuleNotFoundError异常应该都是会遇到的,特别是在项目更换运行环境或者自建包的时候。本文来简单梳理下导致ModuleNotFoundError异常的一些原因以及解决办法,仅当个人笔记使用。

一 import索引机制

  想要知道导致ModuleNotFoundError的原因及其解决办法,那就得了解import 是如何进行索引的,详情见该文章:python中import的索引机制

二 ModuleNotFoundError原因及其解决办法

  导致ModuleNotFoundError的原因各种各样,下面拣一些常见的分析一下(Windows系统)。

1. 模块,包名字错误

  import xxx时xxx名字拼写错误导致ModuleNotFoundError的情况出现也比较多,当模块,包名字错误或者不存在时一般编辑器(pycharm)会以红色的下划线提示,如下
在这里插入图片描述
解决办法:查找确认模块正确名字后重新import

2. 模块,包未导入或未安装

  在copy别人的代码或者网上学习时,有时候别人贴的图或者代码只是部分,以及隐式import,这时我们copy下来运行就有可能抛ModuleNotFoundError异常。
解决办法:
1). 查看有无使用import 导入该模块或包,若没有则使用import导入
2). cmd窗口用pip list查看包是否已经安装,没有则使用pip install xxx安装
3). 检查包版本是否正确,更新包版本(pip install --upgrade xxx) 或者卸载(pip uninstall xxx)重新安装

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)
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
在这里插入图片描述
需要注意的是路径添加要在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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 要导入的模块,包和运行脚本不在同一项目
      如果要引用的模块,包和运行的脚本不在同一个项目,即引用项目之外的包或模块,那么上面方法就不在适用了。不过我们的宗旨还是要把被引用的包或模块的路径添加到sys.path中。从上面的import索引流程图中可以看出,还有三种方法可以将路径添加到sys.path中,如下

1). 通过环境变量PYTONPATH添加到sys.path
在这里插入图片描述

2). 通过.pth文件添加到sys.path
在这里插入图片描述
使用该方法时要注意:.pth文件要放在python安装目录下的site-package文件下,一行就代表一个路径
在这里插入图片描述

3). 直接将被引用的模块或包放在第三方模块site-packages下
在这里插入图片描述
如果被引用的包或模块是公用的,推荐使用该方法,该方法直接把被引用的模块或包放在第三方模块site-packages下,不需要再做额外的操作。

  以上就是解决import时ModuleNotFoundError异常的一些方法,可以根据实际问题环境选择不同的解决方法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/945291
推荐阅读
相关标签
  

闽ICP备14008679号