1,问题描述

python开发过程中,非常常见的一种错误。对于初学者常常比较困惑,希望有一个排查该类问题的套路过程。其实对于经验丰富的python开发工程师写出的程序,也可能会出现该类错误。

2,原因

这种提示是指python解释器在解释import语句时,找不到对应的模块,具体原因如下:

  • python通过模块来组织代码。
  • 模块就是python文件夹(有__init__.py文件的文件夹),python文件,python类(python里一切皆类)。
  • import语句可实现不同模块之间引用。
  • 引用是按照某个搜索顺序,依次查找一些路径(就是操作系统的磁盘目录)。
  • 这个搜索顺序是通过 sys.path 来确定的。
  • 如果所有路径都无法正常找到,就提示No Module named xxx。

3,如何解决

上面那一章节都是废话,下面直接给出排查和解决套路。

3.1 xxx是一个三方包

3.1.1 三方包没有安装

解决步骤:看下有没有安装这个三方包,没有就安装一下。

# 查询是否安装了某个三方包,以tornado这个三方包为例

duyabodeMacBook-Pro:~ duyabo$ pip list |grep tornadoDEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.tornado 4.3duyabodeMacBook-Pro:~ duyabo$ pip install tornado==4.3 # 如果没有就安装一下 pip install xxx=version

3.1.2 三方包已经安装过了

解决步骤:

  • 看下解释器是否正确。一台机器上,可能有python2,python3,是否python2安装了三方包,但是python3没有安装。
  • 看下是否使用了虚拟环境。python为了环境隔离,有时候会使用venv。有可能主机环境安装了三方包,但是项目使用的虚拟环境并没有安装。
  • 看下是否安装了错误的三方包。有些时候三方包的名字,由于历史原因和代码引用的名字并不一样(比如代码里 import pymysql,但是事实上三方包对应名字PyMySQL)。

3.1.3 代码修改了sys.path

解决步骤:比较极端,有新手在代码里修改了sys.path,比如删除了/Library/Python/2.7/site-packages,即使安装了三方包,也正常选择了解释器,但是仍然找不到这个模块。使用默认的sys.path一般是没有问题的。

3.2 xxx是本地模块

3.2.1 sys.path 问题

通常是执行脚本的sh命令,所在的目录不对。因为python解释器会自动把命令执行的工作目录添加到sys.path中。

解决步骤:更换执行命令的工作目录,或者手动修改脚本文件的sys.path。

3.2.2 非法模块问题

  • python目录没有__init__.py文件。新建一下。
  • 远程执行时,上传的代码不完整(远程根本没有这个py模块)。重新上传一下。

3.2.3 循环引用问题

出现循环引用,错误栈有个特殊的明显的标志:有某个import语句在错误栈出现了两次。

解决步骤(选择其一即可):

  • 找到错误栈出现两次的import语句,改成局部引用。
  • 重新构建代码模块。

3.2.4 当前目录优先问题

import引用时,会优先在当前模块查找,如果找到某个模块就不再根据sys.path去查找。如果当前目录下存在同名模块xxx,就可能找不到xxx模块下的模块。

解决步骤:修改当前目录下的文件名,或者改用局部引用。

3.2.5 sys.modules问题

这个出现极少。具体原因是,python解释语句时,会对import语句进行一个优化,把import后的模块会维护一个字典即 sys.modules,如果后续import某个模块,发现已经在 sys.modules 里,就不会去sys.path去查找,而是直接通过sys.modules去引用。

解决方案:尊网嘱。

python常见错误:No Module named xxx相关推荐

  1. python报错No module named XXX解决方法

    今天在搞风控模型升级的时候,遇到了这个错误   No module named XXX 起因就是执行一个python程序,在这个程序中引入了另一个文件夹中  的一个  python 文件中的变量. 所 ...

  2. python报错No module named XXX通用解决方法

    一 问题现象 D:\Python27\python.exe E:/Python/MySQLControler/Main/Main.py Traceback (most recent call last ...

  3. 【转载】pyinstaller打包python文件后,运行出现Failed to execute script xxx.exe错误的解决方式(No module named 'xxx')

    版权说明:https://blog.csdn.net/qq_42063091/article/details/82423221 一.问题定位: windows+r进入cmd命令行窗口 cd exe文件 ...

  4. python导入模块找不到什么原因_python模块以及导入出现ImportError: No module named 'xxx'问题...

    python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包.只要模 块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用 如果你 ...

  5. 【经验】python运行报错ModuleNotFoundError: No module named XXX

    应用场景 本来是在pycharm里运行Python file,一切都很正常,然后为了让脚本自己乖乖地在服务器上跑,不占用IDE调试其他代码,所以决定用命令行直接在服务器上运行,结果报了如下错误: Mo ...

  6. python程序在命令行执行提示ModuleNotFoundError: No module named ‘XXX‘ 解决方法

    python程序在命令行执行提示ModuleNotFoundError: No module named 'XXX' 解决方法 参考文章: (1)python程序在命令行执行提示ModuleNotFo ...

  7. mitmdump 脚本使用python第三方包方法(报错:in script xxx.py: No module named ‘xxx‘)

    本文仅供学习交流使用,如侵立删! mitmdump -s 调用py脚本时 加载python第三方包会报错 报错:in script xxx.py: No module named 'xxx' 解决方法 ...

  8. python no module name_python导包显示No module named XXX问题

    最近用sublime text写python脚本,在导包是一直显示No module named XXX. 问题描述: 首先文件夹的目录结构如下: count.py文件,代码如下: 1 #coding ...

  9. SyntaxError: Non-ASCII character '\xe9' in file...ubuntu系统下python运行时提示编码格式不正确以及提示No module named xxx

    在Ubuntu 18下创建django项目,运行python文件时报错: SyntaxError: Non-ASCII character '\xe9' in file /home/image/桌面/ ...

最新文章

  1. Python 之 matplotlib (十二) subplot
  2. Git搭建自己的网站服务器(Linux)
  3. 如何在linux里如何查看每个文件大小
  4. 在计算机网络中可用于信息传输的介质,在计算机网络中,双绞线、同轴电缆及光纤等用于传输信息的载体被称为______介质。...
  5. php和js哪个更像C语言,js和php存在着什么区别
  6. javascript手册安卓版_JavaScript 完全手册(2018版)
  7. HDU4027 (线段树/修改区间,询问区间和)
  8. php word 图片无法显示,Word文档不显示图片解决方法
  9. matlab条件and,matlaband语句
  10. 如何提取ppt模板?
  11. elasticsearch数据迁移
  12. 史诗级Java资源大全中文版
  13. 如何用html5创作一个游戏
  14. mysql查询3个表_mysql如何实现多表查询,三个数据表的联合查询?
  15. 连续非线性系统线性化理论
  16. 树莓派3代发布支持蓝牙WiFi:售35美元
  17. 10道集合框架面试题(含解析),来看看你会多少
  18. [双系统安装]Win10安装Liunx(Ubuntu20.04.4)到移动硬盘
  19. 绿茶儿茶素在新冠病毒灭活方面取得新突破
  20. roadflow asp.net工作流自定义表单

热门文章

  1. linux怎么看网卡日志,查看网卡信息及状态和网卡日志信息
  2. Hadoop回顾之Hadoop发展史
  3. Android zxing 二维码扫描和生成方法(简单版)
  4. 程序猿要爱惜自己的身体
  5. php按坐标截取图片,PHP与jQuery结合实现截图功能 实现用户自定义头像
  6. windows性能监视器的使用
  7. 华为OD机试 - 篮球比赛 | 机试题算法思路 【2023】
  8. 使用javascript实现的雪花飞舞的效果
  9. js进行取余循环遍历
  10. 小米路由器ARP绑定2021-09-08测试可用