Python:OSError:无法加载库 libcairo.so.2

Posted

技术标签:

【中文标题】Python:OSError:无法加载库 libcairo.so.2【英文标题】:Python: OSError: cannot load library libcairo.so.2 【发布时间】:2015-03-28 11:37:20 【问题描述】:

我在 Windows 7 平台上运行 python 脚本时遇到了一些问题。我已经安装了 Python 和 cairo,最后一个使用“pip”。我正在使用以下命令运行脚本:

C:\Python34>python.exe label/make_label.py

我收到以下错误消息:

Traceback (most recent call last):
  File "label/make_label.py", line 6, in <module>
    import cairocffi as cairo
  File "C:\Python34\lib\site-packages\cairocffi\__init__.py", line 41, in <modul
e>
    cairo = dlopen(ffi, *CAIRO_NAMES)
  File "C:\Python34\lib\site-packages\cairocffi\__init__.py", line 34, in dlopen

    return ffi.dlopen(names[0])  # pragma: no cover
  File "C:\Python34\lib\site-packages\cffi\api.py", line 118, in dlopen
    lib, function_cache = _make_ffi_library(self, name, flags)
  File "C:\Python34\lib\site-packages\cffi\api.py", line 411, in _make_ffi_libra
ry
    backendlib = _load_backend_lib(backend, libname, flags)
  File "C:\Python34\lib\site-packages\cffi\api.py", line 400, in _load_backend_l
ib
    return backend.load_library(name, flags)
OSError: cannot load library libcairo.so.2: error 0x7e

我已经做了如下:

在环境变量中添加了 GTK/bin 的 PATH 我检查文件夹 GTK/bin 并找到“libcairo-2.dll”,因此我将其重命名为 libcairo.so

我不知道还有什么其他信息对解决这个问题有用,但请告诉我,我会尝试添加。

【问题讨论】:

您必须确保 Windows(和 Python)可以找到 libcairo-2.dll。我怀疑 Windows/Python 是否会自动在 GTK/bin 中搜索。我不确定将 dll 文件重命名为 so 扩展名是一件好事。 嗯,我所做的是将 libcairo.dll(以及 libcairo.so)的位置添加到环境变量的 PATH 中。我一直假设它试图检查那个位置。我还能如何将 Python 指向正确的方向? 【参考方案1】:

在 Mac OS X 上使用自制软件:

brew install cairo
brew install pango

【讨论】:

【参考方案2】:

似乎 cairo 依赖于一个不在标准搜索库中的共享库,但是,python 正在调用 dlopen 来动态加载该库,因此您可以尝试放置 libcairo.so.2(如果是链接,则确保引用位于工作目录中的同一文件夹中)。您也可以尝试 pkg-config 来设置环境。看这里http://people.freedesktop.org/~dbn/pkg-config-guide.html

【讨论】:

你确实是对的。通过将 libcairo.so 文件放在工作目录中,脚本可以更进一步。然而,它开始要求更多的 lib 文件,所以我最终把整个文件夹放在那里,不必弄清楚到底需要哪些。 如果您点击链接,并使用所有默认选项安装链接中提到的 exe,它将起作用。 注意: 确保关闭并重新打开 python 终端或 jupyter notebook 服务器。【参考方案3】:

我刚刚遇到了同样的问题(“OSError: cannot load library libcairo.so.2: error 0x7e”),这就是我在 Windows 上解决问题的方法(Windows 7 x64,Python 3.4.2 x86 (MSC v.1600 32 位)):

下载了 GTK+ 堆栈的 all-in-one bundle,包括第 3 方依赖项(其中包含 libcairo-2.dll 和其他与 Cairo 相关的库) 提取此存档到不包含空格的路径(例如C:\Programs\gtk+ 添加提取目录的bin子目录(其中包含提到的libcairo-2.dll和其他必要的文件)到PATH Win+RSystemPropertiesAdvanced 环境变量... 将此目录添加到路径变量(用户变量或系统变量,分号后)(例如...;C:\foo;C:\Programs\gtk+ 好的 pip install cairosvg 用一个非常简单的代码对其进行了测试,该代码已经奏效了:
import cairosvg
testsvg = '<svg  >\
    <text y="10">123</text>\
    </svg>'
svgConvertedToPng = cairosvg.svg2png(bytestring=testsvg)
print(svgConvertedToPng)

【讨论】:

所有合一捆绑包的链接不再起作用【参考方案4】:

我刚刚在 Mac OSX 10.13 上使用 Anaconda Python 安装和cairosvg 修复了这个问题:

$ conda install cairo pango gdk-pixbuf libffi cairosvg
$ cairosvg image.svg -o image.png

我从https://cairosvg.org/documentation/ 得到这个想法,它说它的所有依赖项都可以使用 Wea​​syPrint 安装。 WeasyPrint 在 MacOSX 上的安装文档https://weasyprint.readthedocs.io/en/latest/install.html#macos 说要从 HomeBrew 获取依赖项:

brew install python3 cairo pango gdk-pixbuf libffi

所以我改用conda 进行了尝试,效果很好。

【讨论】:

通过 conda 很好地工作。 (Win10) 你拯救了我的一天,兄弟!这个答案很棒而且有效! 你拯救了我的一天,兄弟!这个答案很棒而且有效!【参考方案5】:

在 Windows 10 上解决如下:

    下载headless UniConverter installer

    找到它的安装位置并将其 dll 子目录添加到系统路径。

    关闭并重新打开命令窗口以获取更新的路径。

【讨论】:

以上是关于Python:OSError:无法加载库 libcairo.so.2的主要内容,如果未能解决你的问题,请参考以下文章

加载 dll 时 Python CFFI 模块失败:OSError 0x7e

Lampp无法加载共享库

gobject-2.0-0 无法在 macbook 上加载

OSError: [Errno 19] 无法打开 uinput 设备:没有这样的设备

OSError: [WinError 126] 在 Python 中找不到指定的模块

在 Python 中加载 C 共享库时出现 OSError(未定义符号:checkedCalloc)