python文件到ast并返回,不带libs

python文件到ast并返回,不带libs,python,abstract-syntax-tree,inspect,Python,Abstract Syntax Tree,Inspect,我试图读取python文件,进行一些更改(构造函数的乘积并将它们内联到一个函数中),然后将其写回文件 Python提供了ast模块,它可以将代码解析为ast,但没有反向转换的方法,我知道有一些库,但我不能使用它们。我曾尝试将树编译成代码对象,然后让他们得到它的源代码,但现在我的方法只生成文件的一部分。我做错了什么 import ast import inspect module_path = "python_file.py" with file(module_path, "r") as f:

我试图读取python文件,进行一些更改(构造函数的乘积并将它们内联到一个函数中),然后将其写回文件

Python提供了ast模块,它可以将代码解析为ast,但没有反向转换的方法,我知道有一些库,但我不能使用它们。我曾尝试将树编译成代码对象,然后让他们得到它的源代码,但现在我的方法只生成文件的一部分。我做错了什么

import ast
import inspect


module_path = "python_file.py"
with file(module_path, "r") as f:
    result = ast.parse(f.read(), module_path)
    print(ast.dump(result, include_attributes=True))
    result = compile(result, module_path, mode='exec')
    result = inspect.getsource(result)
print(result)

inspect.getsource
函数从源文件中查找源代码,因此它不适用于您


实际上,有一个工具可以实现您想要的功能,即转换python代码:

该工具提供了一个库,可用于编写“修复程序”,即将源代码的一部分更改为其他部分的代码片段

不幸的是,它没有很好的文档记录,因此您必须通过查看python源代码中的标准修复程序来学习如何编写修复程序

定义修复程序时,您还可以指定一个
模式
,以便仅当该类型的子树匹配时才会调用修复程序

之后,您可以运行
2to3
工具并指定仅使用您定义的修复程序,最终得到您想要的修复程序

你应该好好看看它,它帮助我在
setup.py
脚本和类似的应用程序中编写了很多修复程序来更新依赖项/更改版本