从Python AST生成.pyc?

时间:2011-12-25 01:49:28

标签: python bytecode abstract-syntax-tree

如何从Python AST生成.pyc文件,以便我可以从Python导入文件?

我使用compile创建了一个代码对象,然后将co_code属性写入文件,但是当我尝试从Python导入文件时,我得到了ImportError: Bad magic number in output.pyc

2 个答案:

答案 0 :(得分:17)

可以从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)

答案 1 :(得分:2)

compile标准函数为Python 2.x和Python 3.x提供此函数。但是,你会发现2.x和3.x之间的AST表示是完全不同的,所以要做好准备。