2011-12-25 10 views
11

मैं पाइथन एएसटी से .pyc फ़ाइल कैसे उत्पन्न करूं ताकि मैं पाइथन से फ़ाइल आयात कर सकूं?पायथन एएसटी से .pyc उत्पन्न करें?

मैं compile का उपयोग किया है एक कोड वस्तु बनाने के लिए है, तो एक फाइल करने के लिए co_code विशेषता लिखा, लेकिन जब मैं अजगर से फ़ाइल आयात करने की कोशिश, मैं एक ImportError: Bad magic number in output.pyc मिलता है।

उत्तर

14

समाधान 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) 

+4

यह वही है जो मैं ढूंढ रहा था। लेकिन मैंने पाया कि मैं सिर्फ py_compile लिख सकता हूं। शुरुआती समय की तलाश किए बिना और उन 4 बाइटों को फिर से लिखने के बिना, \ 0 \ 0 \ 0 \ 0 के बजाय मैजिक पहले। – Matthew

2

compile मानक फ़ंक्शन पाइथन 2.x और पायथन 3.x दोनों के लिए यह फ़ंक्शन प्रदान करता है। हालांकि, आप पाएंगे कि 2.x और 3.x के बीच एएसटी प्रतिनिधित्व काफी अलग है, इसलिए इसके लिए तैयार रहें।

+0

मैं इसे 'लौटे कोड वस्तु पर co_code' विशेषता ले बाईटकोड मैं तलाश कर रहा हूँ है? – exupero

+0

काफी संभवतः। कोड ऑब्जेक्ट के साथ मैंने जो किया है, वह केवल 'exec' या 'eval' पर है, मैंने सीधे बाइटकोड का निरीक्षण नहीं किया है। –

+0

मैंने इस उत्तर से जो कुछ सीखा है उसके आधार पर मैंने प्रश्न को और अधिक विशिष्ट बनाने के लिए संपादित किया है। – exupero

संबंधित मुद्दे