Импорт скрипта, который импортирует другой скрипт, получает ModuleNotFoundError

#import #python-3.7

#импорт #python-3.7

Вопрос:

У меня возникли проблемы с выполнением относительного импорта из импортированного скрипта.

У меня есть структура сценария примерно так:

 script1.py
dirname1/
        dirname2/
                 src/
                     script2.py
                     __init__.py
                     util/
                          script3.py
                          __init__.py
 

Я запускаю скрипт 1 из командной строки. Вот так:

 python script1.py
 

У меня есть сценарий импорта скрипта script1 2 следующим образом:

 import dirname1.dirname2.src.script2
 

Когда я затем пытаюсь импортировать script3 из script2, у меня возникают проблемы.

Я импортирую этот скрипт следующим образом:

 import util.script3
 

И тогда я получаю сообщение об ошибке этот модуль не найден:

 ModuleNotFoundError: No module named 'util'
 

Я пытался это сделать

 import .util.script3
 

однако я получаю синтаксическую ошибку…

Это действительно работает, когда я импортирую все, что относится к верхнему скрипту. Но я предпочел бы иметь возможность импортировать относительно файла, который выполняет импорт.

Ответ №1:

Один из способов сделать это — поместить в dirname1/dirname2/src/util/__init__.py следующее:

 from .script3 import *
 

Затем в dirname1/dirname2/src/__init__.py put,

 from .util import *
from .script2 import *
 

Затем вы можете импортировать все свои файлы script1.py ,
выполнив команду import .util

 from dirname1.dirname2.src import *
 

Тогда все команды доступны

 commandInScript3()
 

Редактировать
Или, возможно, script1.py вы можете сделать

  from dirname1.dirname2.src import script2,util
 util.commandInScript3()
 script2.cmmandInScript2()