解决python import时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)

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

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

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

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

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

  • 29
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "module not found error" 的意思是“找不到模块错误”,通常出现在使用 Node.js 或其他编程语言,当程序尝试引用一个不存在的模块或库会出现这个错误。这可能是因为模块名称拼写错误、路径错误或者模块确实不存在等原因导致的。解决方法通常是检查模块名称和路径是否正确,并确保所需的模块已经正确安装。 ### 回答2: "module not found error" 是一个常见的错误提示,意思是在代码中引入的模块未找到。 这个错误通常出现在以下几种情况下: 1. 模块没有正确安装:在Python中,我们可以使用pip安装第三方模块,或者使用标准库中的模块。如果我们尝试导入一个尚未安装的模块,就会出现"module not found error"。解决方法是使用pip命令安装相应的模块。 2. 模块路径错误:Python会根据一个特定的路径来查找模块。如果模块的路径设置不正确,就会导致"module not found error"。解决方法是检查模块路径是否正确,并且确保模块所在的目录已添加到Python的环境变量中。 3. 模块名称错误:有候我们可能会在代码中使用错误的模块名称,或者拼写错误。这也会导致"module not found error"。解决方法是检查代码中引入模块的语句,并确保模块名称是正确的。 4. Python版本问题:有些模块只能在特定的Python版本中使用,如果我们尝试在不兼容的Python版本中导入这些模块,就会出现"module not found error"。解决方法是检查模块的兼容性,并使用对应的Python版本。 总之,在遇到"module not found error"错误,我们需要仔细检查模块是否正确安装、路径设置是否正确、模块名称是否正确以及Python版本是否兼容。只要解决了这些问题,我们就可以成功导入所需的模块,并继续进行编程工作。 ### 回答3: "Module not found error" 是一个常见的错误,在编程中经常遇到。这个错误表明程序无法找到需要导入的模块。 在Python中,模块是一个包含了函数、类和变量的文件。当我们需要使用模块中的函数或类,我们需要先导入这个模块。 出现"Module not found error"的原因可能有以下几种: 1. 模块没有被安装:如果你使用了一个第三方模块,但没有在你的环境中安装,Python将无法找到这个模块。 2. 模块没有正确命名或路径错误:确保你正确地指定了要导入的模块的名字和路径。 3. 程序文件和模块文件不在同一个目录下:如果你的程序文件和要导入的模块文件不在同一个目录下,Python将无法找到这个模块。 4. Python版本不兼容:有些模块只能在特定的Python版本中被导入,如果你的Python版本不兼容,将会出现模块找不到的错误。 解决"Module not found error"的方法通常有以下几种: 1. 安装所需的模块:如果你使用了一个第三方模块,可以通过使用包管理工具(如pip)来安装它。 2. 检查模块的命名和路径:确保你正确地指定了要导入的模块的名字和路径。 3. 检查文件目录结构:确保你的程序文件和要导入的模块文件在同一个目录下,或者使用正确的相对路径或绝对路径。 4. 检查Python版本:确保你的Python版本与模块兼容。 总结来说,出现"Module not found error"一般是因为模块没有被正确地导入或安装。通过检查模块的命名、路径、文件目录结构和Python版本,我们可以解决这个错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值