从Python AST生成.pyc文件?

13 投票
2 回答
3970 浏览
提问于 2025-04-17 08:58

我想知道怎么从Python的抽象语法树(AST)生成一个.pyc文件,这样我就可以在Python中导入这个文件。

我用compile函数创建了一个代码对象,然后把co_code这个属性写入了一个文件。但是当我尝试从Python中导入这个文件时,出现了一个错误,提示ImportError: Bad magic number in output.pyc

2 个回答

2

compile这个标准函数在Python 2.x和Python 3.x中都可以使用。可是,你会发现这两个版本在AST(抽象语法树)的表现上差别很大,所以要对此有所准备。

19

这个解决方案可以参考一下 py_compile 模块的内容:

import marshal
import py_compile
import time
import ast

codeobject = compile(ast.parse('print "Hello World"'), '<string>', 'exec')

with open('output.pyc', 'wb') as fc:
    fc.write('\0\0\0\0')
    py_compile.wr_long(fc, long(time.time()))
    marshal.dump(codeobject, fc)
    fc.flush()
    fc.seek(0, 0)
    fc.write(py_compile.MAGIC)

撰写回答