从Python AST生成.pyc?

exu*_*ero 13 python bytecode abstract-syntax-tree

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

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

exu*_*ero 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)
Run Code Online (Sandbox Code Playgroud)

  • 这正是我想要的.但是我发现我可以先编写py_compile.MAGIC而不是\ 0\0\0\0,而不必寻找回到开头并重写那4个字节. (5认同)