Search code examples
pythonabstract-syntax-treebytecodepython-ast

Generate .pyc from Python AST?


How would I generate a .pyc file from a Python AST such that I could import the file from Python?

I've used compile to create a code object, then written the co_code attribute to a file, but when I try to import the file from Python, I get an ImportError: Bad magic number in output.pyc.


Solution

  • The solution can be adapted from the py_compile module:

    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)