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