解决办法

下载 gtk3-runtime-3.24.29-2021-04-29-ts-win64.exe​后安装。
记得勾选添加bin目录到环境变量:
OSError: dlopen() failed to load a library: cairo / cairo-2 / cairo-gobject-2 / cairo.so.2_环境变量
这样就不会缺失dll了,当然可能需要重启IDE才能生效,因为添加了新的PATH环境变量。

其它

如果你还是报同样的错那么现在往下看,来深入理解一下为什么这样。
这也是我解决的问题的过程。
首先我们找到报错库的位置。这里可以使用​​​pip show cairosvg​​​:
OSError: dlopen() failed to load a library: cairo / cairo-2 / cairo-gobject-2 / cairo.so.2_javascript_02

其中的Location就是包的安装路径,进入库目录(cairocffi)后,打开其中的 ​​__init__.py​​​ 文件:
OSError: dlopen() failed to load a library: cairo / cairo-2 / cairo-gobject-2 / cairo.so.2_html_03
可以看到报错的位置是第 35 行代码,而调用这个函数的位置就是第 38 行代码,而这个函数的逻辑就是查找 dll, 输入是4个文名,内部循环 lib 与名字进行拼接也就是形成2个名字,所以一共是8个文件名,只要有一个dll找到并调用成功就会 return ,那么就不会报错(其实只要有一个调用成功就可以运行)。所以我们可以在 29-30 行代码之间插入一个输出 ​​​print(path)​​ 看看是否找到了我们之前安装 gtk3-runtime-3.24.29-2021-04-29-ts-win64.exe 中的 dll 文件,而我当时就发现其调用到的是我之前安装的 Tesseract-OCR,由于我在 Tesseract-OCR 也添加了 PATH 环境变量,并且是在 gtk3-runtime-3.24.29-2021-04-29-ts-win64.exe 的 PATH 环境变量前面,根据环境变量调用的就近原则,那么就会导致 调用到 Tesseract-OCR 中的 dll,从而报错,所以解决办法也很简单,将 gtk3-runtime-3.24.29-2021-04-29-ts-win64.exe 的 PATH 环境变量提前就可以了。


作者:Hello_wshuo​