Создать .pyc из Python AST?

Как мне сгенерировать файл .pyc из Python AST, чтобы я мог импортировать файл из Python?

Я использовал compile для создания объекта кода, а затем написал атрибут co_code в файл, но когда я пытаюсь импортировать файл с Python, я получаю ImportError: Bad magic number in output.pyc.

Ответ 1

Решение может быть адаптировано из модуля 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)

Ответ 2

Стандартная функция compile предоставляет эту функцию как для Python 2.x, так и для Python 3.x. Однако вы обнаружите, что представление AST между 2.x и 3.x совершенно иное, поэтому будьте готовы к этому.