1

我正在用 Python 编写一个编译器,使用PLY (Python Lex-Yacc) 库来“编译”编译器。编译器要经过很多规则(仅仅核心规则的数量最终会少于一百个,并且可以扩展它们)。因此,为了将不同类型的规则分开,我在一个modules目录中创建了许多 Python 模块。

要包含所有规则,我不必在此目录中包含模块,但我必须将规则(作为 Python 函数实现)包含到当前命名空间中。一旦它们简单地存在,编译器的输入将被正确标记、解析等。

这是我读过并尝试过的内容:

  • 使用__import__, getattr, and sys.modules(非常原始,一般不推荐)
  • importlib(如何获取模块中的所有内容
  • 很多摆弄,__init__.py只是尝试from modules import *将导入模块中的所有内容

但这些对我来说似乎都不完全令人满意。我不能对它们中的任何一个做我想做的事情。所以我的问题是:如何将子目录中 Python 模块的某些属性导入顶级模块的运行命名空间?

感谢您的关注!

4

1 回答 1

0

您想使用现有的插件库,例如stevedore。它将为您提供枚举可以导入的文件的工具,以及导入这些模块的工具。

于 2014-08-02T15:56:18.643 回答