2013-11-24 1 views
4

Windows 7, 64 비트에서 Python 3.3 (Anaconda distribution)을 실행합니다. 필자는 바이너리 배포판에서 호환 가능한 버전이 없기 때문에 소스에서 컴파일해야했던 CFFI를 포함하여 많은 의존성이있는 Weasyprint app/library를 설치하려고 시도했습니다.dll을로드 할 때 Python CFFI 모듈이 실패합니다. OSError 0x7e

weasyprint를 실행하면 가져 오기로드 프로세스 중 (특히 카이로 용 GTK + 라이브러리 DLL을로드하기 위해 CFFI를 호출 할 때) 문제가 발생합니다. 다음과 같이 내가 오류는 다음과 같습니다

$ 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 

다음과 같이 내가 가진 환경입니다 : 윈도우 7.1 64 비트, 파이썬 3.3 64 비트, CFFI 64 비트와 비주얼 스튜디오 2010에서 (내게로) 컴파일 환경, Cairo의 libcairo-2.dll도 64 비트 버전입니다.

저는 Weasyprint가 다른 (Python 언어) 프로젝트에서 작동하도록하고 싶기 때문에 Windows 프로그래머가 아니며이 혼란에 빠져 있습니다. 필자는 오랫동안 델파이에서 약간의 윈도우 프로그래밍을 해왔으므로 이러한 것들이 어떻게 작동하는지 모호하게 이해하고 있지만이 문제를 해결할 수 없었습니다.

+0

마지막으로 문제를 해결 했습니까? 나는 똑같은 오류에 직면 해 있으며 그것을 고치기 시작 해야할지 전혀 모른다. 모든 제안을 부탁드립니다. 고맙습니다! – neurix

+0

문제는 DLL이 해당 툴체인에서 컴파일 된 Python과 호환되어야하기 때문에 Visual Studio로 CFFI를 컴파일해야한다는 것입니다. C + +와 함께 제공되는 VS 2010 Express를 사용했지만 CFFI는 VS 2007에서 컴파일되도록 고안되었습니다. 올바르게 기억한다면 Microsoft는 make system을 변경하여 더 이상 vsbuild를 사용할 수 없게되었습니다.). 분명히 MS 세계는 * nix 세계와 같지 않습니다. 2014 년의 툴체인이 1986 년부터 코드를 컴파일합니다. 그래서 저는 ... SOL이었습니다 ... 나는 맥 상자에서 weasyprint를 실행하여 문제를 해결합니다. –

답변

1

비슷한 오류 (DLL 충돌)가 발생하고 GTK (예 : "C : \ gtk \ bin") 경로를 내 환경 변수의 시작 부분으로 옮김으로써 마침내 해결되었습니다.

+0

안녕하세요, Mike, 이것도 나를 위해 일했습니다! 좋은 팁 – Hekje

+1

그리고 "C : \ gtk + \ bin"을 사용하지 마십시오. 공백이나 경로의 +를 좋아하지 않습니다. –

+0

이것은 나를 위해 작동하지 않았다. 여전히 'OSError : dlopen()이 라이브러리를로드하지 못했습니다 : cairo/cairo-2' – BCR

관련 문제