如何通过名称加载python模块的抽象语法树?

时间:2018-06-03 21:56:46

标签: python abstract-syntax-tree

假设模块的名称以字符串形式而不是模块对象的形式提供。如何找到其源代码位置并加载抽象语法树(如果源代码存在)?

1 个答案:

答案 0 :(得分:1)

我分三步解决问题:

  1. 按名称导入模块。使用importlib.import_module这应该相对容易,但如果需要,可以使用内置__import__提升自己的版本。
  2. 获取模块的源代码。使用inspect.getsource可能是最简单的方法(但您也可以尝试使用open(the_module.__file__).read()并且可能会有效)。
  3. 将源解析为AST。使用ast.parse应该很容易。即使是这一步,图书馆也不是必不可少的,因为您可以使用内置compile,只要您传递相应的标记(ast.PyCF_ONLY_AST似乎是1024我的系统,所以compile(source, filename, 'exec', 1024)应该有用。)