2012-01-31 11 views
7

पर काम करता है मैं matplotlib द्वारा उत्पादित चार्ट मुद्रित करने के लिए ReportLab का उपयोग कर रहा हूं।IOError: लिनक्स पर ReportLab में matplotlib पीएनजी का उपयोग करके "डिकोडर ज़िप उपलब्ध नहीं है", विंडोज

मैं बिना किसी परेशानी के अपने विंडोज़ विकास मशीन पर ऐसा करने में सक्षम हूं। जब मैं उबंटू सर्वर पर तैनात करता हूं, हालांकि, प्रतिपादन त्रुटि के साथ विफल रहता है। मुझे लगता है कि मुझे पाइथन मॉड्यूल याद आ रहा है, लेकिन मुझे नहीं पता कि कौन सा है। मेरा मानना ​​है कि पायथन, मैटलप्लिब, रिपोर्टलैब और पीआईएल के संस्करण मेरी विकास मशीन और सर्वर दोनों पर समान हैं।

कोड PNG में matplotlib आंकड़ा (बुलाया चार्ट) को परिवर्तित करने और इसे वापस करने के लिए:

res_img = charts.CreateProjectionChart(doc.fund) #calls above code 
    if res_img: 
     img = ImageReader(res_img) 
     canvas.drawImage(img, FromLeft(first_col), FromTop(3.5, 2), width - (.1 * inch), 1.75 * inch, preserveAspectRatio=True, anchor='c') 

जब Windows पर चलाने के लिए, यह काम करता है:

img_stream = StringIO.StringIO() 
chart.savefig(img_stream, format = 'png') 
img_stream.seek(0) 

return img_stream 

कोड छवि का उपयोग करने के लिए। जब लिनक्स पर चलने यह इस त्रुटि पैदा करता है:

File "/home/web-server/reports.py", line 913, in FirstPageSetup 
    canvas.drawImage(img, FromLeft(first_col), FromTop(3.5, 2), width - (.1 * inch), 1.75 * inch, preserveAspectRatio=True, anchor='c') 
    File "/usr/local/lib/python2.7/dist-packages/reportlab-2.5-py2.7-linux-x86_64.egg/reportlab/pdfgen/canvas.py", line 840, in drawImage 
    rawdata = image.getRGBData() 
    File "/usr/local/lib/python2.7/dist-packages/reportlab-2.5-py2.7-linux-x86_64.egg/reportlab/lib/utils.py", line 658, in getRGBData 
    annotateException('\nidentity=%s'%self.identity()) 
    File "/usr/local/lib/python2.7/dist-packages/reportlab-2.5-py2.7-linux-x86_64.egg/reportlab/lib/utils.py", line 648, in getRGBData 
    if Image.VERSION.startswith('1.1.7'): im.load() 
    File "/usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/ImageFile.py", line 189, in load 
    d = Image._getdecoder(self.mode, d, a, self.decoderconfig) 
    File "/usr/local/lib/python2.7/dist-packages/PIL-1.1.7-py2.7-linux-x86_64.egg/Image.py", line 385, in _getdecoder 
    raise IOError("decoder %s not available" % decoder_name) 
IOError: decoder zip not available 
identity=[[email protected]] 
    handle_pageBegin args=() 
+1

यह आप zlib मॉड्यूल याद कर रहे हैं लगता है ले लो। यहां एक नज़र डालें http://www.foxhop.net/ubuntu-python-easy_install-pil-does-not-install-zlib-support – RanRag

+0

क्या आपने पीआईएल को स्वयं संकलित किया था? या पीआईएल 'एपीटी' द्वारा प्रबंधित है? – sarnold

+0

@ कर्नाल्ड: मेरा मानना ​​है कि पीआईएल रिपोर्टलाब द्वारा स्थापित किया गया था। किसी भी घटना में, मैंने इसे नहीं बनाया है, मुझे इसे किसी और चीज के हिस्से के रूप में या विंडोज़ पर easy_install के साथ मिला है और उबंटू पर उपयुक्त है। –

उत्तर

12

जाहिर जनहित याचिका setup.py कैसे libz.so. खोजने के लिए पता नहीं है पीआईएल /usr/lib/usr/lib/i386-linux-gnu/libz.so में स्थित होने की अपेक्षा करता है।

समस्या

1) find . -name libz.so का उपयोग कर libz.so अपने सिस्टम के स्थान का पता लगाएं ठीक करने के लिए।

2) sudo ln -s /usr/lib/i386-linux-gnu/libz.so /usr/lib का उपयोग करके libz.so से/usr/lib से मुलायम लिंक बनाएं।

3) और जैसा कि @ लैरी ने सुझाव दिया है कि आपको zlib के लिए sym-linking के बाद पीआईएल को पुनर्स्थापित करना होगा।

हल करने के लिए 64-बिट सिस्टम के लिए इस समस्या को एक नज़र यहाँ http://www.foxhop.net/ubuntu-python-easy_install-pil-does-not-install-zlib-support

+0

मुझे एक ही समस्या है लेकिन मुझे libz.so चल रहा है। लिनक्स टकसाल और आर्क चलाना मुझे i686 – ralphtheninja

+1

देता है पिल्ल लाइब्रेरी के साथ भी वही त्रुटि। – Druska

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