"ModuleNotFoundError: No module named ‘xxx’"这个报错是个非常常见的报错,几乎每个python程序员都遇到过,导致这个报错的原因也非常多,下面是我曾经遇到过的原因和解决方案
- module包没安装
- 忘了import
- 没有__init__.py文件
- package包的版本不对
- 自定义的包名与安装的包名相同,导致import包的时候导错了包
- 没设置PYTHONPATH或者
- 自建的module包所在路径不在PYTHONPATH下
- 不恰当的使用了相对导入
下面是每种情况分别的解决方案:
1、module包没安装
**使用场景:**pip安装的第三方的包找不到
这个原因比较常见,解决办法就是pip install相应的包即可。如果不确定是否安装了这个包,使用下面的命令查找报警的那个包名,如果有输出结果,说明存在这个包,否则说明不存在这个包。
pip list | grep xxx #把xxx替换成你的包名即可
如果在pip install的过程中提示包找不到,没有这个版本的包,可能是需要加上内置源,比如想要下载公司内部的包,那肯定需要加上公司的内置源才能找到相应的包。内置源的的使用方式加上-i参数即可。
pip install xxx -i https://xxx.xx.org/simple
# 比如下面是清华的源
# https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/
2、忘了import
**使用场景:**pip安装的第三方的包找不到、自建的module包找不到
module安装了但是没有import,这个原因也经常碰到,比如使用了datetime对象, 但是没有导入datetime包。解决方案同样非常简单,import 相应的包即可。比如下面的案例:
import os
import sys
import time
import datetime
这种情况最容易出现在从别处copy了一段了代码,但是没有把所有用到的module导入进来。
3、没有__init__.py文件
**使用场景:**自建的module包找不到
因为python在解释包的时候会给本文件夹也就是本module下的所有文件建立一个索引放在当前路径下的__init__.py文件中,如果没有module的文件索引,我们即使import了指定的包,解释器还是找不到这个module下的文件的,