Estoy usando ReportLab para imprimir un gráfico producido por matplotlib.IOError: "zip del decodificador no está disponible" usando matplotlib PNG en ReportLab en Linux, funciona en Windows
Puedo hacer esto en mi máquina de desarrollo de Windows sin problemas. Sin embargo, cuando despliegue en un servidor Ubuntu, la representación falla con el error descrito. Supongo que me falta un módulo de Python, pero no sé cuál. Creo que las versiones de Python, matplotlib, ReportLab y PIL son las mismas tanto en mi máquina de desarrollo como en el servidor.
Código para convertir la figura matplotlib (llamado gráfico) a PNG y devolverlo:
img_stream = StringIO.StringIO()
chart.savefig(img_stream, format = 'png')
img_stream.seek(0)
return img_stream
código para utilizar la imagen:
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')
Cuando se ejecuta en Windows, esto funciona. Cuando se ejecuta en Linux que produce este error:
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=()
Parece que se están perdiendo módulo zlib. Echa un vistazo aquí http://www.foxhop.net/ubuntu-python-easy_install-pil-does-not-install-zlib-support – RanRag
¿Hiciste una compilación automática de PIL? ¿O es PIL administrado por 'apt'? – sarnold
@sarnold: Creo que PIL fue instalado por ReportLab. En cualquier caso, no lo construí, lo conseguí como parte de algo más o con easy_install en Windows y apt-get en Ubuntu. –