Python从子模块导入子模块

时间:2016-08-10 12:35:35

标签: python import

使用python导入时遇到问题。我写了一个完成的模块,它本身使用了几个子模块(导入的模块)。

e.g。

module:
   main_class.py
   submodule1.py
   ....

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

supermodule:
    main_class_super.py     -- this class imports module.main_class
    module:
       main_class.py
       submodule1.py
       ....

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

任何想法如何在不重组整个资源的情况下解决这个问题?

具体错误:

在我main_class.py我使用的行:

import submodule1

在我supermodule.py我使用的行:

import module.main_class

当执行导入module.main_class的超类时,import submodule1行也会被执行,但失败,因为它无法在supermodule.py的命名空间中找到该模块。

1 个答案:

答案 0 :(得分:2)

如果您使用的是python 2,则应在文件中添加from __future__ import absolute_import(3中不需要),这样您就可以执行Guido states in PEP 328

等导入

根据这个你应该

  • 确保所有包文件夹中都包含__init__.py,以将其标记为可导入

  • 在main_class.py中:将import submodule1import module.submodule1替换为from . import submodule1

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

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

在Python 2.5中使用绝对和显式相对导入was added的选项。