У меня есть небольшая внутренняя DSL, написанная в одном файле Python, который вырос до такой степени, что я хотел бы разделить содержимое на несколько разных каталогов + файлов.импорт символов из пакета python в пространство имен вызывающего абонента
Новая структура каталогов в настоящее время выглядит следующим образом:
dsl/
__init__.py
types/
__init__.py
type1.py
type2.py
и каждый тип файл содержит класс (например, Type1
).
Моя проблема заключается в том, что я хотел бы сохранить выполнение кода, который использует этот DSL как можно проще, что-то вроде:
import dsl
x = Type1()
...
Это означает, что все важные символы должны быть доступны непосредственно в пространство имен пользователя. Я попытался обновления верхнего уровня __init__.py
файла импортировать соответствующие символы:
from types.type1 import Type1
from types.type2 import Type2
...
print globals()
вывод показывает, что символы импортируются правильно, но они до сих пор нет в коде вызывающего абонента (код, который делает то import dsl
). Я думаю, что проблема в том, что символы фактически импортируются в пространство имен dsl. Как это изменить, чтобы классы также были доступны в пространстве имен вызывающего?
На самом деле символы находятся на одном уровне от dsl. например dsl.types.type1. –
@WaiYipTung: Пол С говорит, что он обновил верхний уровень '__init__.py', чтобы включить эти символы, поэтому выполнение 'from dsl import *' должно работать, даже эти символы изначально определяются на один уровень вниз. –