Python:导入导入模块的模块

时间:2013-04-14 20:37:21

标签: python python-import

所以在文件foo中我导入模块:

import lib.helper_functions
import lib.config

在helper_functions.py中,我有:

import config

当我运行foo的main函数时,我得到一个ImportError

编辑:这是我拥有的文件的结构

foo.py
lib/
    config.py
    helper_functions.py

在helper_functions

中导入配置会导致错误
Traceback (most recent call last):
  File "C:\Python33\foo.py", line 1, in <module>
    import lib.helper_functions
  File "C:\Python33\lib\helper_functions.py", line 1, in <module>
    import config
ImportError: No module named 'config'

所以:当我运行foo.py时,解释器会抱怨helper_functions的import语句。然而,当我运行helper_functions的主要部分时,不会出现这样的错误。

2 个答案:

答案 0 :(得分:7)

您需要使用绝对导入导入config。使用:

from lib import config

或使用:

from . import config

Python 3仅支持绝对导入;声明import config仅导入顶级模块config

答案 1 :(得分:0)

在python中,每个模块都有自己的命名空间。导入另一个模块时,实际上只导入其名称。

名称“config”存在于模块helper_functions中,因为您在那里导入了它。在foo中导入helper_functions只会将名称“helper_function”带入foo的命名空间,没有别的。

您实际上可以通过执行以下操作来引用当前导入的foo.py中的“config”名称:

lib.helper_functions.config

但是在python中,最好是明确而不是隐式。因此,在foo.py中导入config是最好的方法。

#file foo.py
import lib.helper_functions
import config