проблема с импортом вложенного модуля python при выполнении самой импортированной функции

#python #import #module #path

#питон #импортировать #модуль #путь

Вопрос:

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

 Folder ├── Generator.py └── modules  ├── Function1.py  └── Subfunction.py  

Generator.py импортирует функцию 1, а функция 1 импортирует подфункцию. Функция 1 должна быть способна запускаться как автономная программа и как импортированный модуль Generator.py

Это не проблема сама по себе, так как я использую if __ name__ == «__ main__»: для распознавания типа вызова.
Но программа не выполняет импорт подфункции в зависимости от кода, который я выполняю.

 # Generator.py  import Function1  # Function1.py  import Subfunction  import modules.Subfunction  

Первый из них работает, если я выполню Function1.py, но это не сработает, если я запущу Generator.py

Второй вариант работает, если я выполню Generator.py, но это не сработает, если я запущу Function1.py

Я думал, что импорт и относительные пути связаны с модулем, в котором размещен код, а не с точки зрения вызывающего абонента. Я попробовал импортировать .модули.Функция 1 и импорт .Функция 1, но проблема остается. Есть ли какой-либо элегантный способ импортировать подфункцию для обоих применений, или мне нужно включить импорт под именем if == main или перехватить его в try/except?

Изменить: весь код для @Bastien B

В этой форме это работает, если я выполняю Function1.py сама по себе. Если я выполню Generator.py, Я получаю ModuleNotFoundError: Нет модуля с именем «Function1»

 # Generator.py  import Function1  print(Function1.Function1_return)  # Function1.py  def Function1_return():  return Subfunction.Subfunction_return()  import Subfunction  if __name__ == '__main__':  print(Function1_return())  # Subfunction.py  def Subfunction_return():  return "this is subfunction"  

Комментарии:

1. Можете ли вы предоставить часть кода ваших 3 файлов ?

2. @BastienB включено в Редактирование

Ответ №1:

Из того, что я вижу, ваше «если имя …» не является проблемой.

Если вы используете локальную операционную систему, это должно работать просто отлично:

generator.py

 from Folder.modules.function1 import Function1_return print(Function1_return())  

Function1.py

 from Folder.modules.Subfunction import Subfunction_return  def Function1_return():  return Subfunction_return()  if __name__ == '__main__':  print(Function1_return())   

Subfunction.py

 def Subfunction_return():  return "this is subfunction"  

В зависимости от структуры ваших файлов вам, возможно, придется немного изменить это