ModuleNotFoundError в подмодуле, который импортирует подмодуль - PullRequest
0 голосов
/ 25 октября 2018

Предположим, у нас есть следующая структура:

outer_module.py|
               |subfolder|
                         |__init__.py
                         |inner_module.py
                         |foo.py

В outer_module.py у нас будет:

from subfolder.inner_module import X

В inner_module.py у нас будет:

from foo import Y

Тогда я получаю ModuleNotFoundError: No module named 'foo' под управлением outer_module.py.Как я могу импортировать этот подмодуль, который импортирует подмодуль без получения ModuleNotFoundError?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

В inner_module.py, используйте относительный или абсолютный импорт:

from .foo import Y

# or

from subfolder.foo import Y

Ссылки на документацию:

0 голосов
/ 25 октября 2018

from foo импорт из верхнего уровня модуля foo.Вам необходимо явно указать, что вы ищете модуль в том же пакете.

Используйте .foo, чтобы указать, что вы импортируете из того же пакета:

from .foo import Y

Вы также можете указатьабсолютный путь, но затем необходимо указать имя пакета:

from subfolder.foo import Y

Цитирование из import документации оператора :

При указании, чтоМодуль для импорта вам не нужно указывать абсолютное имя модуля.Когда модуль или пакет содержится в другом пакете, можно сделать относительный импорт в том же самом верхнем пакете, не упоминая имя пакета.Используя начальные точки в указанном модуле или пакете после от, вы можете указать, как высоко пройти по текущей иерархии пакетов без указания точных имен.Одна начальная точка означает текущий пакет, в котором существует модуль, выполняющий импорт.Две точки означают один уровень пакета.Три точки выше двух уровней и т. Д. Поэтому, если вы выполните from . import mod из модуля в пакете pkg, то в итоге вы импортируете pkg.mod.Если вы выполните from ..subpkg2 import mod из pkg.subpkg1, вы импортируете pkg.subpkg2.mod.

...