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