2013-11-24 69 views
4

我在Windows 7,64位下運行Python 3.3(Anaconda發行版)。我試圖安裝Weasyprint應用程序/庫,它具有許多依賴項,包括CFFI,我必須從源代碼編譯,因爲在二進制分發版中沒有兼容版本。加載dll時,Python CFFI模塊失敗:OSError 0x7e

當我運行weasyprint時,它會在導入加載過程中窒息,特別是當它調用CFFI以加載開羅的GTK +庫dll時。我得到的錯誤如下:

$ weasyprint 
Traceback (most recent call last): 
    File "c:\anaconda\envs\py33\lib\site-packages\cffi-0.8-py3.3-win-amd64.egg\cffi\api.py", line 399, in _make_ffi_library 
    backendlib = backend.load_library(name, flags) 
OSError: cannot load library libcairo-2.dll: error 0x7e 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "C:\Anaconda\envs\py33\Scripts\weasyprint-script.py", line 9, in <module> 
    load_entry_point('WeasyPrint==0.20', 'console_scripts', 'weasyprint')() 
    File "C:\Anaconda\envs\py33\lib\site-packages\pkg_resources.py", line 343, in load_entry_point 
    return get_distribution(dist).load_entry_point(group, name) 
    File "C:\Anaconda\envs\py33\lib\site-packages\pkg_resources.py", line 2355, in load_entry_point 
    return ep.load() 
    File "C:\Anaconda\envs\py33\lib\site-packages\pkg_resources.py", line 2061, in load 
    entry = __import__(self.module_name, globals(),globals(), ['__name__']) 
    File "c:\anaconda\envs\py33\lib\site-packages\weasyprint-0.20-py3.3.egg\weasyprint\__init__.py", line 309, in <module> 
    from .css import PARSER, preprocess_stylesheet 
    File "c:\anaconda\envs\py33\lib\site-packages\weasyprint-0.20-py3.3.egg\weasyprint\css\__init__.py", line 30, in <module> 
    from . import computed_values 
    File "c:\anaconda\envs\py33\lib\site-packages\weasyprint-0.20-py3.3.egg\weasyprint\css\computed_values.py", line 18, in <module> 
    from .. import text 
    File "c:\anaconda\envs\py33\lib\site-packages\weasyprint-0.20-py3.3.egg\weasyprint\text.py", line 18, in <module> 
    import cairocffi as cairo 
    File "c:\anaconda\envs\py33\lib\site-packages\cairocffi-0.5.1-py3.3.egg\cairocffi\__init__.py", line 39, in <module> 
    cairo = dlopen(ffi, 'libcairo-2.dll', 'cairo', 'libcairo-2') 
    File "c:\anaconda\envs\py33\lib\site-packages\cairocffi-0.5.1-py3.3.egg\cairocffi\__init__.py", line 34, in dlopen 
    return ffi.dlopen(names[0]) # pragma: no cover 
    File "c:\anaconda\envs\py33\lib\site-packages\cffi-0.8-py3.3-win-amd64.egg\cffi\api.py", line 117, in dlopen 
    lib, function_cache = _make_ffi_library(self, name, flags) 
    File "c:\anaconda\envs\py33\lib\site-packages\cffi-0.8-py3.3-win-amd64.egg\cffi\api.py", line 405, in _make_ffi_library 
    backendlib = backend.load_library(path, flags) 
OSError: cannot load library C:\Windows\system32\libcairo-2.dll: error 0x7e 

我的環境如下:Windows 7.1 64位的Python 3.3 64位,CFFI的Visual Studio 2010下編譯(由我)與64位環境和開羅的libcairo-2.dll也是64位版本。

我不是Windows程序員,我只是深入研究這個混亂,因爲我想讓Weasyprint爲另一個(Python語言)項目工作。很久以前,我在Delphi中做了一些小小的Windows編程,所以我對這些東西的工作方式有一個模糊的把握,但是我一直無法解決這個問題。

+0

您是否最終解決了問題?我面臨同樣的錯誤,不知道從哪裏開始修復它。任何建議表示讚賞。謝謝! – neurix

+0

問題是CFFI必須使用Visual Studio進行編譯,因爲DLL必須與在該工具鏈下編譯的Python兼容。我有VS 2010 Express,它隨C++一起提供,但如果我沒有記錯的話,CFFI被設計爲在VS 2007下編譯,並且微軟改變了它的make系統,所以你不能再使用vsbuild(或者類似的那樣的惱人的東西)。顯然,MS世界並不像* nix世界,你2014年的工具鏈仍然在編譯1986年的代碼。所以我是SOL ...我在Mac盒子上運行weasyprint來解決這個問題。 –

回答

1

我得到了類似的錯誤(衝突的dll),它最終只是通過將路徑移動到GTK(例如:「C:\ gtk \ bin」)到我的環境變量的開始來解決。

+0

嗨邁克,這也適合我!偉大的提示 – Hekje

+1

並且不要嘗試使用「C:\ gtk + \ bin」。它不喜歡空間或路徑中的+。 –

+0

這不適合我。我仍然得到錯誤'OSError:dlopen()未能加載庫:cairo/cairo-2' – BCR

相關問題