问题
- ModuleNotFoundError: No module named ‘xxx’
原因
导致这个报错的原因有很多
- module包没安装
- 忘记import
- 没有__init__.py文件
- 自定义的包名与安装的包名相同,导致import包的时候导错了包
解决方法
module包没安装
- 这个原因比较常见,解决办法就是pip install相应的包即可
pip install xxx -i https://xxx.xx.org/simple
# 比如下面是清华的源
# https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/
忘记import
- 这种情况最容易出现在从别处copy了一段了代码,但是没有把所有用到的module导入进来。
没有__init__.py文件
-
自建的module包找不到
-
因为python在解释包的时候会给本文件夹也就是本module下的所有文件建立一个索引放在当前路径下的__init__.py文件中,如果没有module的文件索引,我们即使import了指定的包,解释器还是找不到这个module下的文件的,因而我们一般会在每个文件夹下建一个空的__init__.py文件。如果一个文件夹下没有__init__.py文件,不会被当做一个module。
-
解决方案: 如果这个包是你自己写的,不妨检查一下待导入的包的根目录是否存在一个__init__.py文件,没有的话建一个空的__init__.py文件即可 (注意:不光要检查待导入的包根目录是否存在__init__.py文件,还需要检查当前程序所在文件夹是否存在这个文件)。如果这个包是pip install来的,那基本上可以忽略这种可能了,继续尝试下面的原因吧。
-
对于缺少__init__.py文件这种情况,还有一种报错形式是: ImportError: attempted relative import with no known parent package
自建的包名与第三方安装的包名相同,导致import包的时候导错了包
- 使用场景: pip安装的第三方的包找不到、自建的module包找不到
- 解决方式 是给自己的文件夹换个名字,使得与第三方包名不冲突。