import 问题¶
python 中 import 其它模块时,如果路径不对,会出现找不到模块的错误。 假设代码目录结构如下:
-- src |-- m1.py |-- mod2 | `-- m2.py |-- mod3 | `-- m3.py `-- main.py
主程序与模块在同一级目录
main.py
importm1.py
import m1
main.py
中 importm2.py
我们先试试直接 import, 则会报
ImportError: No module named ..
错误。>>> import mod2.m2 ImportError: No module named mod2.m2
这是因为 python 只会把有 __init__.py 文件的目录当做 python package. 在 mod2 目录下添加
__init__.py
文件, 此时目录结构如下:-- src |-- m1.py |-- mod2 | |-- __init__.py | `-- m2.py |-- mod3 | |-- __init__.py | `-- m3.py `-- main.py
此时再 import 就不会出错了。
>>> import mod2.m2
这里我们运行下面的代码看看:
>>> import mod2 >>> dir(mod2) ['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
我们可以看到这里
dir
函数并没有打印 m2.py, 是不是感觉 比较奇怪,其实这里 import 只是导入了mod2.__init__.py
如果我们希望dir(mod2)
能看到 m2.py 里的函数,我们需要在 __init__.py 中 import m2m2
importm3
这种情况比较复杂, 如果程序的入口是
m2.py
, 那么导入方式如下:import sys sys.append('..') import m3
如果程序的入口是
main.py
然后在main.py
用到了m2, 那么导入方式如下:import mod1.m1