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

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

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

2 ответа

Решение

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

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

Другие вопросы по тегам