我正在用 Python 编写一个编译器,使用PLY (Python Lex-Yacc) 库来“编译”编译器。编译器要经过很多规则(仅仅核心规则的数量最终会少于一百个,并且可以扩展它们)。因此,为了将不同类型的规则分开,我在一个modules
目录中创建了许多 Python 模块。
要包含所有规则,我不必在此目录中包含模块,但我必须将规则(作为 Python 函数实现)包含到当前命名空间中。一旦它们简单地存在,编译器的输入将被正确标记、解析等。
这是我读过并尝试过的内容:
- 使用
__import__
,getattr
, andsys.modules
(非常原始,一般不推荐) - 库
importlib
(如何获取模块中的所有内容?) - 很多摆弄,
__init__.py
只是尝试from modules import *
将导入模块中的所有内容
但这些对我来说似乎都不完全令人满意。我不能对它们中的任何一个做我想做的事情。所以我的问题是:如何将子目录中 Python 模块的某些属性导入顶级模块的运行命名空间?
感谢您的关注!