Django OSError: 在Windows上找不到名为“cairo”的库。

23

当我运行Django服务器时,我看到了这个问题!!

OSError: no library called "cairo" was found

no library called "libcairo-2" was found

cannot load library 'libcairo.so': error 0x7e

cannot load library 'libcairo.2.dylib': error 0x

cannot load library 'libcairo-2.dll': error 0x7e

请问您能否提供更多细节,例如Django的版本、Windows的版本等。 - JohnC
pip freeze 的输出在这里会很有用。你是如何运行你的 Django 项目的?使用 manage.py 吗? - Danny Staple
我们可以获取操作系统及其版本吗? - Matthew Gaiser
1
你的项目中使用了 weasyprint 吗? - Srijwal R
我遇到了同样的问题,我正在使用django-weasyprint。 - Gilbish Kosma
请检查我的答案。 - Srijwal R
9个回答

12

安装GTK+对我没用。

我使用UniConverter2.0解决了这个问题。我的环境是:

  • Python 3.7
  • Windows 10 x64
  1. 安装uniconvertor-2.0rc4-win64_headless.msi,
  2. 在UniConverter安装路径下找到“dll”子目录。(在我的情况下,C:\Program Files\UniConvertor-2.0rc4\dlls)
  3. 将这个“dll”路径添加到系统路径中。
  4. 关闭VSCode并重新打开项目。
  5. 再次尝试运行服务器。 享受吧!

10

WeasyPrint需要Pango、cairo和GDK-PixBuf库。它们是GTK+(曾经被称为GIMP Toolkit)的一部分,必须单独安装。

在安装GTK+库之后,请执行以下操作:

python -m weasyprint http://weasyprint.org weasyprint.pdf

即使我已经安装了GTK,仍然出现这个错误。 - Umair
2
不要忘记将安装的GTK+库添加到系统路径中,并重新启动您的IDE,以使更改生效。 - Mathador
@Mathador 同意。 - Srijwal R
@Mathador 我应该怎样把它们添加到路径中? - yishairasowsky
1
请按照这里的说明:“http://gisaxs.com/index.php/View.gtk_installation”并将“C:\GTK\bin”替换为您在驱动器上安装GTK包的实际路径。 - Mathador

4
从Python 3.8开始,dll文件需要单独添加。 已经添加了GTK+、MSYS2、Visual Studio C编译器和Uniconverter,但是似乎都无法正常工作。 最终,在调用add_dll_directory的脚本中解决了问题。
import os

def set_dll_search_path():
   # Python 3.8 no longer searches for DLLs in PATH, so we have to add
   # everything in PATH manually. Note that unlike PATH add_dll_directory
   # has no defined order, so if there are two cairo DLLs in PATH we
   # might get a random one.
   if os.name != "nt" or not hasattr(os, "add_dll_directory"):
       return
   for p in os.environ.get("PATH", "").split(os.pathsep):
       try:
           os.add_dll_directory(p)
       except OSError:
           pass


set_dll_search_path()

来源:PyCairo Windows Python3.8 导入问题


哦我的天,这就是在其他方法都无效之后解决我的问题的方法。谢谢! - Nick Garyu

2

如果您正在使用轻量级的Linux Docker镜像,则可能不包括上述的GTK,那么您可以通过在Dockerfile中添加来包含它。

RUN apt-get update -y
RUN apt-get install python3-cffi python3-brotli libpango-1.0-0 libharfbuzz0b libpangoft2-1.0-0 libgtk-3-dev gcc -y

weasyprint建议安装所有这些软件包,而GCC具有GTK。


2

1

好的,我解决了。你可以拥有一个不起作用的64位Python版本。我发现可行的方法是从Python官网安装64位版本的Python,而不是从Microsoft商店安装!

  1. 卸载您已安装的任何Python版本
  2. 下载 https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe
  3. 安装
  4. 下载并安装 https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases
    1. 确切的链接是 https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases/download/2021-04-29/gtk3-runtime-3.24.29-2021-04-29-ts-win64.exe
    2. 请注意,该链接来自 https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#windows
  5. 将bin文件夹添加到您的环境路径中(对不起,这是别人的机器,我使用Ubuntu)。
  6. 按照weasyprint的第一步操作,您就可以开始使用了!

没错,就是这样!似乎是从Microsoft Store安装的Python出了问题。我使用了Python 3.10.1,它对我有效。也许不要直接链接到特定的Python安装程序,只需像您为GTK安装程序所做的那样指向官方网站即可。还要注意,这种安装Python的方式不提供python3命令行别名。只需使用python即可。 - Didier L

1

0

我也遇到了同样的错误

我按照 在Windows中安装gtk 的步骤安装了gtk

但是什么都没用

接着:

python -m pip install pycairo

解决了我的问题


0
可能有点晚了,但我遇到了同样的问题,这里是解决方法:https://weasyprint.readthedocs.io/en/stable/install.html#windows。在这里,你将找到包含所需 DLL 的 GTK 包的链接。
在我的情况下,我使用的是 64 位 Python,因此我使用了:“Download and run the latest gtk3-runtime-x.x.x-x-x-x-ts-win64.exe”。
我没有改变安装目录。
安装完成后,我添加了路径到我的变量路径中。
我重新启动了终端,并确保能够通过 WHERE libcairo-2.dll 找到 DLLs,它返回了 C:\Program Files\GTK3-Runtime Win64\bin\libcairo-2.dll 然后我运行 python -m weasyprint http://weasyprint.org weasyprint.pdf,得到了一些警告,但它们只是警告 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接