使用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
的命名空间中找到该模块。
答案 0 :(得分:2)
如果您使用的是python 2,则应在文件中添加from __future__ import absolute_import
(3中不需要),这样您就可以执行Guido states in PEP 328
根据这个你应该
确保所有包文件夹中都包含__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中使用绝对和显式相对导入was added的选项。