包模块应该如何相互导入?

时间:2013-07-29 11:45:28

标签: python python-import python-module

我有这个包结构:

widget/
    __init__.py
    core.py
    extension.py

__ init__.py为空。

core.py包含:

import widget.extension as extension

它有效,但感觉就像我正在踩着包裹而只是从全局路径中导入它(即爬出它只是为了回顾它)。如果我只是在core.py中import extension它不起作用。这有关系吗?我错了吗?我是否应该将这两个模块都移到__init__.py

1 个答案:

答案 0 :(得分:1)

我假设您使用的是Python 3;在Python 2中,import extension将起作用,因为Python 2在查找全局绝对引用之前将首先查找本地的相对导入。

您还有两个选择:

from widget import extension

from . import extension

后者相对于当前包导入,这使您可以重命名widget包,而无需更新所有内部导入。你使用的是风格和品味。