首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dlopen()无法加载库: cairo / cairo-2

dlopen()无法加载库: cairo / cairo-2
EN

Stack Overflow用户
提问于 2016-05-25 20:24:03
回答 6查看 27.3K关注 0票数 24

这是我的观点:

代码语言:javascript
复制
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)时,它会给我一个错误。

代码语言:javascript
复制
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

EN

回答 6

Stack Overflow用户

发布于 2016-10-17 23:07:57

通过在Ubuntu上安装以下依赖项,我解决了这个问题:

代码语言:javascript
复制
 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

票数 32
EN

Stack Overflow用户

发布于 2016-09-24 16:27:14

在OSX EL CAPITAN上重新安装weasyprint时,我也遇到了同样的问题。这就是我解决这个问题的方法。

首先,在通过pip安装时找不到cairo,所以我尝试使用以下命令通过自制软件安装它

代码语言:javascript
复制
brew install cairo pango gdk-pixbuf libxml2 libxslt libffi

完成后,我尝试找出cairo的安装路径。对于我的示例,位置是/usr/local/homebrew/Cellar/cairo/1.14.6_1/lib/我刚刚将其导出到我的DYLD库路径

代码语言:javascript
复制
export DYLD_LIBRARY_PATH=/usr/local/homebrew/Cellar/cairo/1.14.6_1/lib/

然后我卸载并重新安装了weasyprint

代码语言:javascript
复制
pip uninstall weasyprint
pip install weasyprint

在那之后,我尝试运行weasyprint,但得到了一个新的错误

代码语言:javascript
复制
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

我试着找出object库的位置。在/opt/local/lib中找到它并设置备用库路径

代码语言:javascript
复制
export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib

在那之后,我再次尝试运行weasyprint,它起作用了

代码语言:javascript
复制
(test)anurag-mac:~ anurag$ weasyprint --version
WeasyPrint version 0.31

我希望其他人也能发现它的用处。

更新-1

尽管上面的方法起作用了,但由于这个原因,MySQL python开始给出错误,并且culprit定义了一个回退库路径。所以我删除了这一行

代码语言:javascript
复制
export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib

这又给了我一个gobject错误,然后我尝试查找它的安装位置并附加到DYLD_LIBRARY_PATH

代码语言:javascript
复制
export DYLD_LIBRARY_PATH=/usr/local/homebrew/Cellar/cairo/1.14.6_1/lib/:/usr/local/homebrew/Cellar/glib/2.48.2/lib/

这样做之后,我在pango上得到了一个类似的错误。在纠正所有错误之后,这是工作的最终库路径

代码语言:javascript
复制
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/
票数 14
EN

Stack Overflow用户

发布于 2018-12-20 19:43:36

我在macOS Mojave上用boxes.py也遇到了同样的错误。我的解决方案是在pip3上安装cairocffi,在brew上安装cairo。这两个命令各自失败,但它们共同适用于boxes.py

代码语言:javascript
复制
pip3 install cairocffi
brew install cairo
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37437041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档