首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过名字加载python模块的抽象语法树?

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

Stack Overflow用户
提问于 2018-06-04 05:56:46
回答 1查看 43关注 0票数 0

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 07:20:02

我把这个问题分成三个步骤:

  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)应该可以工作)。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50671321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档