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.
如果你使用的是 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中添加了使用绝对和显式相对导入的选项。
| 归档时间: |
|
| 查看次数: |
3059 次 |
| 最近记录: |