Получение OSError: dlopen() не удалось загрузить библиотеку: cairo/cairo-2 в Windows

Я получаю OSError: dlopen() failed to load a library: cairo / cairo-2 при попытке запустить Django после новой установки. Использование Windows.

Я использую Weasyprint, похоже, он связан с этим, судя по полной трассировке:

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

person SaeX    schedule 24.07.2016    source источник


Ответы (3)


См. http://win32builder.gnome.org/ или http://gtk-win.sourceforge.net/home/ для получения списка пакетов GTK+ для установки. К ним относятся необходимые библиотеки cairo/cairo-2.

  • Извлеките содержимое папки bin\, например. C:\Program Files (x86)\GTK2-bundle\ (подойдет любой каталог)
  • Добавьте указанный выше каталог в переменную среды PATH.
  • Перезапустите среду разработки (в моем случае PyCharm)
person SaeX    schedule 24.07.2016
comment
При устранении неполадок в Windows вам действительно нужно позаботиться о том, чтобы избежать конфликтов путей в переменных среды. Я обновил визуальную студию и установил другой программный пакет, одно из обновлений изменило некоторые из моих путей, что привело к появлению этой ошибки. - person Bob Jordan; 15.08.2017
comment
Если вы поместили каталог в конец PATH, но по-прежнему получаете эту ошибку, попробуйте переместить его ближе к началу. Я столкнулся с DLL Hell, когда он был в конце. - person drhagen; 22.06.2018
comment
Я скачал пакет, распаковал его в C:\Program Files (x86)\GTK 2\bin и добавил C:\Program Files (x86)\GTK 2\ в переменную пути. Все еще выдает ту же ошибку, может кто-нибудь помочь? - person Laurie; 28.06.2018

У меня была такая же проблема в Windows X64/Python37, но я исправил ее с помощью следующей ссылки:

выполните следующие действия: https://weasyprint.readthedocs.io/en/stable/install.html#windows (я установил gtk с помощью установщика MSYS и добавил C:\msys64\mingw32\bin в переменную PATH, после чего возникла та же ошибка, и я удалил библиотеку Python cairocffi и переустановил ее)

person J4v4d    schedule 07.03.2019

Я получил следующее сообщение об ошибке: OSError: dlopen() failed to load a library: cairo / cairo-2 / cairo-gobject-2, в Windows 10.

Библиотеки GTK+, которые содержат вышеуказанные библиотеки, можно получить и установить с https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer, как описано на https://weasyprint.readthedocs.io/en/latest/install.html#gtk64installer.

Обратите внимание, что вашу среду разработки нужно будет перезапустить, чтобы прочитать PATH.

person SaeX    schedule 29.12.2020