django OSError: no library called "cairo" was found on windows

django OSError: no library called "cairo" was found on windows

当我 运行 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

WeasyPrint 需要 Pango、cairo 和 GDK-PixBuf 库。它们是 GTK+(以前称为 GIMP 工具包)的一部分,必须单独安装。

安装 GTK+ libraries 后,执行:

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

安装 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. 再次尝试 运行 服务器。 享受吧!

从Python3.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 Import Issue

可能有点晚了,但我刚遇到同样的问题并且: 从这里开始: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

我没有更改安装目录

安装完成。我将路径添加到我的变量路径中。

我重新启动了终端,确保我可以找到 DLL:WHERE libcairo-2.dll。这回退了 C:\Program Files\GTK3-Runtime Win64\bin\libcairo-2.dll

那我运行python -m weasyprint http://weasyprint.org weasyprint.pdf 并收到一些警告,但它们只是警告:)

在此处查看解决方案:

https://www.programmersought.com/article/47674569357/

如果安装后没有添加路径,则需要添加路径:

C:\程序Files\GTK3-RuntimeWin64\bin

我已经这样解决了很多次

我也遇到了同样的错误

我已经按照 gtk install in windows

安装了 gtk

没有效果

之后:

python -m pip install pycairo

帮我解决了问题

好的,我想通了。你可以有一个 64 位版本的 python 但它不起作用。我发现可以工作并且可以更改的是从 python 的网站而不是 Microsoft 商店安装 python 的 64 位版本!

  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. 确切的 link 是 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. 请注意 link 来自 https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#windows
  5. 在您的环境路径中添加 bin 文件夹(抱歉,这是别人的机器,我使用 Ubuntu)。
  6. 运行 通过 weasyprint 的第一步,你应该可以开始了!

如果您使用的是轻量级 Linux Docker 图像,它可能不包含上面所说的 GTK,那么,您可以通过在 Docker 文件中添加它来包含它

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。