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=() 

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

  • Несколько страниц с использованием Reportlab - Django
  • Как изменить цвет текста / шрифта в reportlab.pdfgen
  • Преобразование SVG в PDF (svglib + reportlab недостаточно хорошо)
  • ReportLab: Как выровнять текстовый объект?
  • Изображение холста Reportlab не отображается
  • reportlab низкая производительность
  • Соотношение сторон изображения с использованием Reportlab в Python
  • Устранение неполадок reportlab heisenbug
  • Нарисуйте изображения с помощью холста и используйте SimpleDocTemplate
  • Как добавить png в PDF с помощью лаборатории отчетов
  • Лучший способ экспорта Pandas DF в PDF-файл с использованием Python
  •  
    Interesting Posts for Van-Lav

    Двоичный массив numpy в список целых чисел?

    Как принять keypress в командной строке python?

    питонное кириллическое декодирование

    django очень медленный на моей машине

    Python / Django: создание более простого списка из values_list ()

    Есть ли простой способ прервать код статуса 429?

    Django Rest Framework ModelSerializer Установить атрибут для создания

    Как получить целочисленные значения из строки в Python?

    Как обрабатывать возвращаемый тип C ++ std :: vector <int> в типах Python?

    Tensorflow смешивает изображения и метки при создании партии

    Несколько операторов, найденных при компиляции одного оператора

    выполнить скрипт python с помощью функции из командной строки, Linux

    Python Email, Соединение не может быть выполнено, потому что целевая машина активно отказалась от него

    Заменить текст в примере HTML и BBCode

    TensorFlow в производстве для прогнозирования в реальном времени в приложении с высоким трафиком – как его использовать?

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