#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"
В зависимости от структуры ваших файлов вам, возможно, придется немного изменить это