问题描述:
文件架构
root # 根目录
dir # 子目录
__ init __.py
a.py (from b import *)
b.pymain.py (from dir import a)
python main.py
抛出异常:ModuleNotFoundError: No module named 'b'
原因
python 解释器启动后,module named ‘b’ 不在搜索路径里,搜索路径可通过打印 sys.path 查看,sys.path 只到 ‘/root’ 这一层,未到 ’/root/dir’。
解决办法
第一种:main.py 中手动添加 ‘/root/dir’ 到 sys.path
import sys
sys.path.append('/root/dir')
第二种:把 dir 整个文件夹封装成包(非模块,注意区分包和模块)
具体操作(许多第三方包都是如此)
1. __int__.py 加入
from . import a
from . import b
2. a.py 导入 b.py 写法
from .b import *
注:包中的模块 a.py 不能单独当作脚本执行,即
在a.py 中添加如下运行,执行不通过
if __name__ == '__main__':
main()