dlopen() не удалось загрузить библиотеку: cairo/cairo-2

Это мой взгляд:

from django.conf import settings
from django.http import HttpResponse
from django.template.loader import render_to_string
import weasyprint


    @staff_member_required
    def admin_order_pdf(request, order_id):
        order = get_object_or_404(Order, id=order_id)
        html = render_to_string('orders/order/pdf.html', {'order': order})
        response = HttpResponse(content_type='application/pdf')
        response['Content-Disposition'] = 'filename="order_{}.pdf"'.format(order.id)
        weasyprint.HTML(string=html).write_pdf(response,
                                               stylesheets=[weasyprint.CSS(settings.STATIC_ROOT + 'css/pdf.css')])
        return response

когда я хочу импортировать (импортировать weasyprint), это выдает мне ошибку.

ERROR:

Request Method: GET
Request URL:    http://127.0.0.1:8000/admin/orders/order/
Django Version: 1.8.6
Exception Type: OSError
Exception Value:    
dlopen() failed to load a library: cairo / cairo-2

Я уже установил weasyprint и cairocffi. Я использую osx El Capitan.

Ответ 1

Это было решено для меня, установив следующие зависимости на Ubuntu:

 sudo apt-get install libpango1.0-0
 sudo apt-get install libcairo2
 sudo apt-get install libpq-dev

Проверьте зависимости по ссылке:

http://weasyprint.readthedocs.io/en/latest/install.html

Ответ 2

У меня также была такая же проблема с новой установкой weasyprint на OSX EL CAPITAN. Вот как я это решил.

Во-первых, cairo не был найден, когда был установлен через pip, поэтому я попытался установить его через homebrew, используя следующую команду

brew install cairo pango gdk-pixbuf libxml2 libxslt libffi

Как только это будет сделано, я попытался выяснить путь установки cairo. Для моего случая, местоположение было /usr/local/homebrew/Cellar/cairo/1.14.6_1/lib/Я только что экспортировал это на мой путь библиотеки DYLD

export DYLD_LIBRARY_PATH=/usr/local/homebrew/Cellar/cairo/1.14.6_1/lib/

Затем я удалил и снова установил weasyprint

pip uninstall weasyprint
pip install weasyprint

Сообщение, что я попытался запустить weasyprint, но получил новую ошибку

Traceback (most recent call last):
File "/Users/anurag/VirtualEnvs/test/bin/weasyprint", line 11, in <module>
 load_entry_point('WeasyPrint==0.31', 'console_scripts', 'weasyprint')()
File "/Users/anurag/VirtualEnvs/test/lib/python2.7/site-packages/pkg_resources/__init__.py", line 565, in load_entry_point
 return get_distribution(dist).load_entry_point(group, name)
File "/Users/anurag/VirtualEnvs/test/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2598, in load_entry_point
 return ep.load()
File "/Users/anurag/VirtualEnvs/test/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2258, in load
 return self.resolve()
File "/Users/anurag/VirtualEnvs/test/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2264, in resolve
 module = __import__(self.module_name, fromlist=['__name__'], level=0)
File "/Users/anurag/VirtualEnvs/test/lib/python2.7/site-packages/weasyprint/__init__.py", line 338, in <module>
 from .css import PARSER, preprocess_stylesheet  # noqa
File "/Users/anurag/VirtualEnvs/test/lib/python2.7/site-packages/weasyprint/css/__init__.py", line 30, in <module>
 from . import computed_values
File "/Users/anurag/VirtualEnvs/test/lib/python2.7/site-packages/weasyprint/css/computed_values.py", line 18, in <module>
 from .. import text
File "/Users/anurag/VirtualEnvs/test/lib/python2.7/site-packages/weasyprint/text.py", line 216, in <module>
 'libgobject-2.0.dylib')
File "/Users/anurag/VirtualEnvs/test/lib/python2.7/site-packages/weasyprint/text.py", line 212, in dlopen
 return ffi.dlopen(names[0])  # pragma: no cover
File "/Users/anurag/VirtualEnvs/test/lib/python2.7/site-packages/cffi/api.py", line 139, in dlopen
 lib, function_cache = _make_ffi_library(self, name, flags)
File "/Users/anurag/VirtualEnvs/test/lib/python2.7/site-packages/cffi/api.py", line 770, in _make_ffi_library
 backendlib = _load_backend_lib(backend, libname, flags)
File "/Users/anurag/VirtualEnvs/test/lib/python2.7/site-packages/cffi/api.py", line 759, in _load_backend_lib
 return backend.load_library(name, flags)
OSError: cannot load library gobject-2.0: dlopen(gobject-2.0, 2): image not found

Я попытался выяснить расположение библиотеки объектов. Найти его в /opt/local/lib и установить путь резервной библиотеки

export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib

После этого я снова попытался запустить weasyprint, и это сработало

(test)anurag-mac:~ anurag$ weasyprint --version
WeasyPrint version 0.31

Я надеюсь, что кто-то еще найдет это полезным.

UPDATE-1

Хотя вышеупомянутый метод работал, mysql python начал выдавать ошибку из-за этого, а виновник определял путь резервной библиотеки. Поэтому я удалил эту строку

export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib

который снова дал мне ошибку gobject, затем я попытался найти местоположение его установки и добавить к DYLD_LIBRARY_PATH

export DYLD_LIBRARY_PATH=/usr/local/homebrew/Cellar/cairo/1.14.6_1/lib/:/usr/local/homebrew/Cellar/glib/2.48.2/lib/

После этого я получил аналогичную ошибку для pango. После исправления всех ошибок это последний путь библиотеки, который работал

export DYLD_LIBRARY_PATH=/usr/local/homebrew/Cellar/cairo/1.14.6_1/lib/:/usr/local/homebrew/Cellar/glib/2.48.2/lib/:/usr/local/homebrew/Cellar/pango/1.40.3/lib/

Ответ 4

У меня была такая же ошибка с boxes.py на MacOS Mojave. Моим решением было установить cairocffi с pip3 и cairo с brew. Две команды не работают самостоятельно, но вместе они работают для boxes.py:

pip3 install cairocffi
brew install cairo