Python importing submodules from submodule

Wod*_*RHR 1 python import

I have got a problem when using python imports. I wrote a finished module, that itself uses several submodules (those are imported).

例如

module:
   main_class.py
   submodule1.py
   ....
Run Code Online (Sandbox Code Playgroud)

现在我想通过另一个超级模块使用这个完成的模块,所以文件夹结构会像这样改变

supermodule:
    main_class_super.py     -- this class imports module.main_class
    module:
       main_class.py
       submodule1.py
       ....
Run Code Online (Sandbox Code Playgroud)

但是现在main_class.py模块内部代码中使用的所有导入都失败了(我猜是因为导入现在在 的命名空间中工作main_class_super.py)

知道如何在不重组整个来源的情况下解决这个问题吗?


具体错误:

在我的main_class.py我使用的行:

import submodule1
Run Code Online (Sandbox Code Playgroud)

在我的supermodule.py我使用的行:

import module.main_class
Run Code Online (Sandbox Code Playgroud)

当执行导入的超类时,module.main_class当然import submodule1也会执行该行,但失败了,因为它无法在supermodule.py.

jan*_*ohl 5

如果你使用的是 python 2,你应该添加from __future__ import absolute_import 到你的文件中(在 3 上不需要),这样你就可以像PEP 328 中的 Guido 状态那样进行导入

根据这个你应该

  • 确保所有包文件夹中都有一个__init__.py将它们标记为可导入的

  • 在 main_class.py 中:替换import submodule1或import module.submodule1使用from . import submodule1

  • 在 main_class_super.py 中:替换import module.main_class为from .module import main_class

这样您就不必关心任何外包装结构。

在 Python 2.5中添加了使用绝对和显式相对导入的选项。