Создать .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 совершенно иное, поэтому будьте готовы к этому.