IOError: «декодер zip недоступен» с использованием matplotlib PNG в ReportLab для Linux, работает в Windows

Я использую ReportLab для печати диаграммы, созданной matplotlib.

Я могу сделать это на моей машине разработки Windows без проблем. Однако при развертывании на сервере Ubuntu рендеринг завершается с ошибкой. Я предполагаю, что у меня отсутствует модуль Python, но я не знаю, какой из них. Я считаю, что версии Python, matplotlib, ReportLab и PIL одинаковы как на моей машине разработки, так и на сервере.

Код, чтобы преобразовать фигуру matplotlib (называемую диаграммой) в PNG и вернуть ее:

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

Код для использования изображения:

  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 это работает. Когда он запускается в Linux, он вызывает эту ошибку:

  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=[ImageReader@0x30336d0] handle_pageBegin args=() 

  • Каков самый простой способ добавить гиперссылку на элемент canvas в ReportLab?
  • Как установить любой шрифт в reportlab Canvas в python?
  • Appengine - Reportlab (Получить фото с модели)
  • Django ReportLab: использование объекта Drawing для создания PDF и возврата через Httpresponse
  • Можем ли мы создавать интерактивные формы PDF с помощью reportlab?
  • Как рисоватьИзменить фигуру matplotlib в холсте reportlab?
  • Нарисуйте изображения с помощью холста и используйте SimpleDocTemplate
  • Несколько таблиц (5) одна страница с помощью ReportLab
  • One Solution collect form web for “IOError: «декодер zip недоступен» с использованием matplotlib PNG в ReportLab для Linux, работает в Windows”

    По-видимому, PIL setup.py не знает, как найти libz.so. PIL ожидает, что libz.so будет находиться в /usr/lib not /usr/lib/i386-linux-gnu/libz.so .

    Решить проблему

    1) Найдите местоположение ваших систем libz.so, используя find . -name libz.so find . -name libz.so

    2) Создайте мягкую ссылку из libz.so в / usr / lib, используя sudo ln -s /usr/lib/i386-linux-gnu/libz.so /usr/lib .

    3) И как @Larry предположил, что вам пришлось переустановить PIL после sym-linking так для zlib.

    Чтобы решить эту проблему для 64-битной системы, посмотрите здесь http://www.foxhop.net/ubuntu-python-easy_install-pil-does-not-install-zlib-support

    Python - лучший язык программирования в мире.