Python: импорт модуля, который импортирует модуль

Итак, в файле foo я импортирую модули:

import lib.helper_functions
import lib.config

И в helper_functions.py у меня есть:

import config

Когда я запускаю главную функцию foo, я получаю ImportError

EDIT: Вот структура файлов, которые у меня есть

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, такой ошибки не появляется.

Ответ 1

Вам нужно импортировать config, используя абсолютный импорт. Либо используйте:

from lib import config

или используйте:

from . import config

Python 3 поддерживает только абсолютный импорт; оператор import config импортирует только модуль верхнего уровня config.

Ответ 2

В python каждый модуль имеет собственное пространство имен. Когда вы импортируете другой модуль, вы фактически импортируете его имя.

Имя "config" существует в модуле helper_functions, потому что вы импортировали его там. Импорт helper_functions в foo приводит только имя "helper_function" в пространство имен foo, ничего больше.

Фактически вы можете ссылаться на имя "config" в foo.py с текущим импортом, выполнив что-то вроде:

lib.helper_functions.config

Но в python всегда лучше быть явным, а не подразумеваемым. Поэтому импорт конфигурации в foo.py был бы лучшим способом для продолжения.

#file foo.py
import lib.helper_functions
import config