假设模块的名称是以字符串而不是模块对象的形式提供的。如何定位其源代码位置并加载抽象语法树(如果源代码存在)?
发布于 2018-06-04 07:20:02
我把这个问题分成三个步骤:
importlib.import_module
应该会相对容易一些,不过如果你需要的话,你也可以用内置的__import__
来修改你自己的版本。inspect.getsource
可能是最简单的方法(但您也可以尝试open(the_module.__file__).read()
,它很可能会起作用)。ast.parse
应该很容易做到。即使对于这一步,库也不是必需的,因为您可以使用内置的compile
,只要您传递了适当的标志(在我的系统上,ast.PyCF_ONLY_AST
显示为1024
,所以compile(source, filename, 'exec', 1024)
应该可以工作)。https://stackoverflow.com/questions/50671321
复制相似问题