Python вложенный импорт 'ModuleNotFound' ошибка - PullRequest
1 голос
/ 02 июня 2019

У меня следующая структура папок:

  • high_level.py (верхний уровень)
  • low_level (каталог)
    • low_level_script.py (в пределах low_level))
    • config.py (в пределах 'low_level')

и следующий код:

high_level.py

from low_level import low_level_script

low_level_script.test_fun()

low_level_script.py

import config
def test_fun():
    return config.A

config.py

A = 1

Если я сделаюниже, на верхнем уровне, я получаю ошибку импорта.

import high_level

ModuleNotFoundError: No module named 'config'

Почему это так, и каков наилучший способ сделать script.py способным импортировать config.py, таким образом, чтобыscript.py импортируется из собственного каталога, а каталог выше?

Причина, по которой я заинтересован в этом, заключается в том, что я хочу иметь pytest-тесты в сценариях test_high_level.py и test_low_level.py pytest, которые импортируют сценарии высокого и низкого уровня.

Я использую Python 3.7.Я вижу еще один вопрос, задающий что-то подобное здесь, но, похоже, нет конкретного предложения, кроме как читать всю эту документацию.

Импорт вложенных модулей Python

https://docs.python.org/3/reference/import.html

Этот вопрос также кажется похожим - он рекомендует использовать libname, но я не совсем уверен, какэто решает проблему.

Python: Ошибка ModuleNotFound

1 Ответ

1 голос
/ 02 июня 2019

Чтобы использовать относительный импорт, перед именем модуля должна стоять точка.

import .config

или используйте абсолютный импорт вместо

from low_level import config
...