Getting “OSError: dlopen() failed to load a library: cairo / cairo-2” on Windows

匿名 (未验证) 提交于 2019-12-03 01:10:02

问题:

I'm getting OSError: dlopen() failed to load a library: cairo / cairo-2 when trying to execute Django after a new install. Using Windows.

I'm using Weasyprint, seems to be related to that one, according to the full trace:

Unhandled exception in thread started by <function wrapper at 0x03F605B0> Traceback (most recent call last):   File "C:\my-venv\lib\site-packages\django\utils\autoreload.py", line 226, in wrapper     fn(*args, **kwargs)   File "C:\my-venv\lib\site-packages\django\core\management\commands\runserver.py", line 109, in inner_run     autoreload.raise_last_exception()   File "C:\my-venv\lib\site-packages\django\utils\autoreload.py", line 249, in raise_last_exception     six.reraise(*_exception)   File "C:\my-venv\lib\site-packages\django\utils\autoreload.py", line 226, in wrapper     fn(*args, **kwargs)   File "C:\my-venv\lib\site-packages\django\__init__.py", line 18, in setup     apps.populate(settings.INSTALLED_APPS)   File "C:\my-venv\lib\site-packages\django\apps\registry.py", line 115, in populate     app_config.ready()   File "C:\my-venv\lib\site-packages\debug_toolbar\apps.py", line 15, in ready     dt_settings.patch_all()   File "C:\my-venv\lib\site-packages\debug_toolbar\settings.py", line 243, in patch_all     patch_root_urlconf()   File "C:\my-venv\lib\site-packages\debug_toolbar\settings.py", line 231, in patch_root_urlconf     reverse('djdt:render_panel')   File "C:\my-venv\lib\site-packages\django\core\urlresolvers.py", line 568, in reverse     app_list = resolver.app_dict[ns]   File "C:\my-venv\lib\site-packages\django\core\urlresolvers.py", line 360, in app_dict     self._populate()   File "C:\my-venv\lib\site-packages\django\core\urlresolvers.py", line 293, in _populate     for pattern in reversed(self.url_patterns):   File "C:\my-venv\lib\site-packages\django\utils\functional.py", line 33, in __get__     res = instance.__dict__[self.name] = self.func(instance)   File "C:\my-venv\lib\site-packages\django\core\urlresolvers.py", line 417, in url_patterns     patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)   File "C:\my-venv\lib\site-packages\django\utils\functional.py", line 33, in __get__     res = instance.__dict__[self.name] = self.func(instance)   File "C:\my-venv\lib\site-packages\django\core\urlresolvers.py", line 410, in urlconf_module     return import_module(self.urlconf_name)   File "C:\Python27\Lib\importlib\__init__.py", line 37, in import_module     __import__(name)   File "C:\my-project\project\urls.py", line 9, in <module>     from utils.views import site_info, nav_autocomplete   File "C:\my-project\utils\views.py", line 24, in <module>     import weasyprint   File "C:\my-venv\lib\site-packages\weasyprint\__init__.py", line 338, in <module>     from .css import PARSER, preprocess_stylesheet  # noqa   File "C:\my-venv\lib\site-packages\weasyprint\css\__init__.py", line 30, in <module>     from . import computed_values   File "C:\my-venv\lib\site-packages\weasyprint\css\computed_values.py", line 18, in <module>     from .. import text   File "C:\my-venv\lib\site-packages\weasyprint\text.py", line 18, in <module>     import cairocffi as cairo   File "C:\my-venv\lib\site-packages\cairocffi\__init__.py", line 46, in <module>     cairo = dlopen(ffi, 'cairo', 'cairo-2')   File "C:\my-venv\lib\site-packages\cairocffi\__init__.py", line 43, in dlopen     raise OSError("dlopen() failed to load a library: %s" % ' / '.join(names)) OSError: dlopen() failed to load a library: cairo / cairo-2 

回答1:

See http://win32builder.gnome.org/ or http://gtk-win.sourceforge.net/home/ for a list of GTK+ bundles to install. These include the required cairo/cairo-2 libs.

  • Extract the contents of the bin\ folder to e.g. C:\Program Files (x86)\GTK2-bundle\ (any directory would do)
  • Add the above directory to your PATH environment variable
  • Restart your development environment (in my case PyCharm)


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!