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

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

13 голосов
/ 25 декабря 2011

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

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

Ответы [ 2 ]

17 голосов
/ 25 декабря 2011

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

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

...