6

所以在一个文件 foo 我正在导入模块:

import lib.helper_functions
import lib.config

在 helper_functions.py 中,我有:

import config

当我运行 foo 的主要功能时,我得到一个 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 的导入语句。然而,当我运行 helper_functions 的 main 时,没有出现这样的错误。

4

2 回答 2

7

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

from lib import config

或使用:

from . import config

Python 3 只支持绝对导入;该语句import config仅导入顶级模块config

于 2013-04-14T21:29:34.207 回答
0

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

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

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

lib.helper_functions.config

但是在 python 中,显式总比隐式好。因此,在 foo.py 中导入配置将是最好的方法。

#file foo.py
import lib.helper_functions
import config
于 2013-04-14T22:39:24.510 回答