С каталогом:
app/
sub1/
__init__.py
module1.py
sub2/
__init__.py
test.py
Что я представляю для импорта модуля:
создать область (или поток?)
запустить module.py в этой области
from ..sub import module1
недопустимо с верхним уровнем на test.py
но open('../sub1/module1.py', 'r')
работает !!
Так что это читабельно, но не импортируется.
Начните с чего-то похожего на import moudule as *
exec(open('../sub1/module1.py', 'r').read())
Далее выполните этот сценарий в отдельной области и назовите эту область.
класс предоставит область, также вызов переменных класса аналогичен вызову переменных модуля.
import module1 as cus
class Module:
exec(open('../sub1/module1.py', 'r').read(), locals(), locals())
cus = Mudule()
cus.function_inside_module1()
функция exec(object[, globals[, locals]])
запустить object
в области действия globals
и сохранить переменные в locals
. (Наверное)
Поскольку аргументы globals
и locals
являются locals()
класса Module
, это похоже на то, что я представляю для импорта.
Если это работает должным образом, я думаю, модуль под модулем может быть записан как вложенный класс.
Какие проблемы вызовет этот странный импорт?
Если нет, то почему файл читаемый, но не импортируемый (с ограничением верхнего уровня)?
Редактировать
@ user2357112 извините, я не знал, как написать многострочный комментарий:
даст ли это поведение, которое вы запрашивали при загрузке родительского пакета?
class sub1:
exec(open('../sub1/__init__.py', 'r').read(), locals(), locals())
class Module:
exec(open('../sub1/module1.py', 'r').read(), locals(), locals())
cus = sub1.Module()
del sub1