ModuleNotFoundError: No module named 'xxx'

问题

ModuleNotFoundError: No module named 'xxx'

分析

这一问题一般出现在import时,如from xxx import A,或from xxx.A import B

解决方案

解决方便比较简单,就是把xxx所在的目录添加到当前python能找到的地方即可。

具体实施

首先来查看一下sys.path默认包含什么吧。sys.path是个list。

import sys

print(sys.path)

上述命令,可以打印出当前python文件执行时默认会查找的目录,可以看到,当前python文件所在的父目录是可以找到的,也就是说与这个文件平级的所有文件都可以找到,直接用from 平级python文件 import A,B都可以。但是再上一级目录、上上一级目录、上上级目录的另一子目录,默认都是找不到的。解决方案就是把要查找的目录都加到sys.path之中。

os.path.realpath(__file__)是指当前python文件的path

os.path.dirname(os.path.realpath(__file__))是指当前python文件的上一级目录

os.path.dirname(os.path.dirname(os.path.realpath(__file__)))是指当前python文件的上上一级目录

所以,如果要import的文件是在上上一级目录,在python文件中添加如下语句即可。

import sys

import os

sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

那,如果是上上一级目录的另一个子目录呢。

A

--B

----b.py

--C

----c.py

如上,运行c.py,但c.py要import b.py,sys.path默认是包含C的,A是上上一级目录,用上面所说的语句即可找到,那要找到B呢,就要再在sys.path中添加B目录,即os.path.join(A目录, "B")

import sys

import os

A_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))

B_dir = os.path.join(A_dir, B)

sys.path.append(A_dir)

sys.path.append(B_dir)

另外,在python3中最好不要用相对引用(from .A import B),还是用sys.path把需要的目录都添加进去为好。

你可能感兴趣的:(ModuleNotFoundError: No module named 'xxx')