假设模块的名称以字符串形式而不是模块对象的形式提供。如何找到其源代码位置并加载抽象语法树(如果源代码存在)?
答案 0 :(得分:1)
我分三步解决问题:
importlib.import_module
这应该相对容易,但如果需要,可以使用内置__import__
提升自己的版本。inspect.getsource
可能是最简单的方法(但您也可以尝试使用open(the_module.__file__).read()
并且可能会有效)。ast.parse
应该很容易。即使是这一步,图书馆也不是必不可少的,因为您可以使用内置compile
,只要您传递相应的标记(ast.PyCF_ONLY_AST
似乎是1024
我的系统,所以compile(source, filename, 'exec', 1024)
应该有用。)