如何解决 weasyprint 错误消息 gobject-2.0-0 错误 0x7e 消息?

Posted

技术标签:

【中文标题】如何解决 weasyprint 错误消息 gobject-2.0-0 错误 0x7e 消息?【英文标题】:how to solve weasyprint error message gobject-2.0-0 error 0x7e message? 【发布时间】:2021-11-03 03:06:51 【问题描述】:

我安装了几个基于 `https://pbpython.com/pdf-reports.htm 的文件来创建报告。但是以下错误消息

Traceback (most recent call last):
  File "C:\histdata\test02.py", line 10, in <module>
    from weasyprint import html
  File "C:\Users\AquaTrader\AppData\Local\Programs\Python\Python38\lib\site-packages\weasyprint\__init__.py", line 322, in <module>
    from .css import preprocess_stylesheet  # noqa isort:skip
  File "C:\Users\AquaTrader\AppData\Local\Programs\Python\Python38\lib\site-packages\weasyprint\css\__init__.py", line 27, in <module>
    from . import computed_values, counters, media_queries
  File "C:\Users\AquaTrader\AppData\Local\Programs\Python\Python38\lib\site-packages\weasyprint\css\computed_values.py", line 16, in <module>
    from ..text.ffi import ffi, pango, units_to_double
  File "C:\Users\AquaTrader\AppData\Local\Programs\Python\Python38\lib\site-packages\weasyprint\text\ffi.py", line 380, in <module>
    gobject = _dlopen(
  File "C:\Users\AquaTrader\AppData\Local\Programs\Python\Python38\lib\site-packages\weasyprint\text\ffi.py", line 377, in _dlopen
    return ffi.dlopen(names[0])  # pragma: no cover
  File "C:\Users\AquaTrader\AppData\Local\Programs\Python\Python38\lib\site-packages\cffi\api.py", line 150, in dlopen
    lib, function_cache = _make_ffi_library(self, name, flags)
  File "C:\Users\AquaTrader\AppData\Local\Programs\Python\Python38\lib\site-packages\cffi\api.py", line 832, in _make_ffi_library
    backendlib = _load_backend_lib(backend, libname, flags)
  File "C:\Users\AquaTrader\AppData\Local\Programs\Python\Python38\lib\site-packages\cffi\api.py", line 827, in _load_backend_lib
    raise OSError(msg)
OSError: cannot load library 'gobject-2.0-0': error 0x7e.  Additionally, ctypes.util.find_library() did not manage to locate a library called 'gobject-2.0-0'

有什么建议吗?提前致谢。 (请注意github上有一个类似的问题告诉个人安装GTK3。)这是正确的吗?

【问题讨论】:

【参考方案1】:

该错误意味着无法找到作为 GTK3+ 一部分的 gobject-2.0.0 库。您是否遵循安装说明 (https://doc.courtbouillon.org/weasyprint/stable/first_steps.html),其中包括安装 GTK3+?如果没有,就这样做。如果是,那么问题是 GTK3+ DLL 不是 Python 正在寻找它们的地方。为此,您需要将包含 DLL 的目录(例如 Windows 上的 C:\Program Files\GTK3-Runtime Win64\bin)添加到您的 PATH 环境变量中。该目录包含相关的libgobject-2.0-0.dll 库。

对于 Python 3.8+ 和 weasyprint 54+,您可以使用环境变量 WEASYPRINT_DLL_DIRECTORIES (documentation) 手动设置 GTK3+ 库的路径。

【讨论】:

谢谢。在查看安装 gtk3+ 的文档时,实在是太麻烦了,所以我决定不使用 weasyprint,而是使用不同的软件包。我是否应该认为问题已解决,以便您获得信用?对我来说很好。 你最终改用什么包? 根据this answer 和the release notes,Python 3.8+ 忽略了 PATH 对 Windows 上的扩展模块和加载 ctypes 的 DLL 的 DLL 依赖。有解决方法吗?否则,您的答案仅适用于最高 3.7 的 Python。 最后我通过删除从 Microsoft Store 安装的 Python 3.9 并从官方网站(版本 3.10.1)重新安装,基于 this answer 解决了这个问题。我

以上是关于如何解决 weasyprint 错误消息 gobject-2.0-0 错误 0x7e 消息?的主要内容,如果未能解决你的问题,请参考以下文章

使用 jinja2 和 weasyprint 在 PDF 渲染中忽略图像

WEASYPRINT M1 MAC MINI

Django-Weasyprint 图像问题

weasyprint 与 django 将数字呈现为图像

使用具有通用页眉/页脚和分页的 WeasyPrint 生成 PDF

如何解决错误消息:“无法映射路径'/'。”