Sto usando ReportLab per stampare un grafico prodotto da matplotlib.IOError: "decoder zip non disponibile" usando matplotlib PNG in ReportLab su Linux, funziona su Windows
Sono in grado di farlo sulla mia macchina di sviluppo Windows senza problemi. Quando eseguo il deploy su un server Ubuntu, tuttavia, il rendering fallisce con l'errore descritto. Presumo che mi manca un modulo Python, ma non so quale. Credo che le versioni di Python, matplotlib, ReportLab e PIL siano le stesse sia sulla mia macchina di sviluppo che sul server.
codice per convertire la cifra matplotlib (chiamato grafico) in PNG e restituirlo:
img_stream = StringIO.StringIO()
chart.savefig(img_stream, format = 'png')
img_stream.seek(0)
return img_stream
codice per utilizzare l'immagine:
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')
Quando eseguito su Windows, questo funziona. Quando viene eseguito su Linux produce questo errore:
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=()
Sembra non trovi il modulo zlib. Dai un'occhiata qui http://www.foxhop.net/ubuntu-python-easy_install-pil-does-not-install-zlib-support – RanRag
Hai autocompilato PIL? O è PIL gestito da 'apt'? – sarnold
@sarnold: credo che PIL sia stato installato da ReportLab. In ogni caso, non l'ho creato io l'ho preso come parte di qualcos'altro o con easy_install su Windows e apt-get su Ubuntu. –