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
- 安装uniconvertor-2.0rc4-win64_headless.msi,
- 在UniConverter安装路径下找到“dll”子目录。(在我的例子中,
C:\Program Files\UniConvertor-2.0rc4\dlls
)
- 将此“dll”路径添加到系统路径。
- 关闭 VSCode 并重新打开项目。
- 再次尝试 运行 服务器。
享受吧!
从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()
可能有点晚了,但我刚遇到同样的问题并且:
从这里开始: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 位版本!
- 删除您安装的 python 的任何版本
- 下载https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe
- 安装
- 下载并安装https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases
- 在您的环境路径中添加 bin 文件夹(抱歉,这是别人的机器,我使用 Ubuntu)。
- 运行 通过 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。
当我 运行 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
- 安装uniconvertor-2.0rc4-win64_headless.msi,
- 在UniConverter安装路径下找到“dll”子目录。(在我的例子中,
C:\Program Files\UniConvertor-2.0rc4\dlls
) - 将此“dll”路径添加到系统路径。
- 关闭 VSCode 并重新打开项目。
- 再次尝试 运行 服务器。 享受吧!
从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()
可能有点晚了,但我刚遇到同样的问题并且:
从这里开始: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 位版本!
- 删除您安装的 python 的任何版本
- 下载https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe
- 安装
- 下载并安装https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases
- 在您的环境路径中添加 bin 文件夹(抱歉,这是别人的机器,我使用 Ubuntu)。
- 运行 通过 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。