2016-05-25 50 views
6

這是我的看法:的dlopen()不能加載庫:開羅/開羅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 
當我要導入(import 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 EI CAPITAN。

回答

4

我也有同樣的問題上OSX埃爾卡皮坦全新安裝weasyprint的。 這就是我解決它的方法。

首先,開羅沒有被當通過PIP安裝發現,所以我嘗試使用以下命令

brew install cairo pango gdk-pixbuf libxml2 libxslt libffi 

一旦做到這一點通過自制安裝它,我試圖找出開羅的安裝路徑。對於我而言,地點是/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的蟒蛇開始給因爲這個錯誤而罪魁禍首被定義後備庫路徑。所以我刪除了這條線

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/ 

這樣做後,我得到了類似的錯誤攀高。修正所有錯誤之後,這是它的工作

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/ 
+0

非常有幫助,非常感謝! – antoinet