gobject-2.0-0 无法在 macbook 上加载

Har*_*ble 17 glib flask python-3.x weasyprint macbookpro-touch-bar

当我在 Python3 和 Mac OS 上启动 Flask 应用程序时,遇到此错误:

OSError:无法加载库“gobject-2.0-0”:dlopen(gobject-2.0-0, 2):找不到图像。此外,ctypes.util.find_library() 无法找到名为“gobject-2.0-0”的库

我weasyprint在我的项目中使用它导致了这个问题。

我尝试安装glib,它已安装在我的系统中。

Mik*_*ets 41

我刚刚在 Mac M1 上解决了同样的问题。

问题是没有创建到库的符号链接(不能说安装时应该由 homebrew 或 weasyprint 完成)。

所以,我必须手动完成

sudo ln -s /opt/homebrew/opt/glib/lib/libgobject-2.0.0.dylib /usr/local/lib/gobject-2.0
sudo ln -s /opt/homebrew/opt/pango/lib/libpango-1.0.dylib /usr/local/lib/pango-1.0
sudo ln -s /opt/homebrew/opt/harfbuzz/lib/libharfbuzz.dylib /usr/local/lib/harfbuzz
sudo ln -s /opt/homebrew/opt/fontconfig/lib/libfontconfig.1.dylib /usr/local/lib/fontconfig-1
sudo ln -s /opt/homebrew/opt/pango/lib/libpangoft2-1.0.dylib /usr/local/lib/pangoft2-1.0
Run Code Online (Sandbox Code Playgroud)

这解决了问题。

为了测试 Python 是否可以找到您可以运行的库

from ctypes.util import find_library

find_library('gobject-2.0')  # Pass any other lib name as an argument
Run Code Online (Sandbox Code Playgroud)

UPD。python如果你安装的话就没有这个问题homebrew。

  • 在我的系统上,我必须首先运行“mkdir /usr/local/lib/”来创建该文件夹,因为它不存在。 (3认同)
  • 我❤️你,谢谢你 (2认同)
  • 谢谢你,伙计,它节省了我很多时间! (2认同)

har*_*gim 6

如果您weasyprint在虚拟环境中安装了软件包,但没有安装一些必需的软件包,那么这可能就是原因。事实上,就我而言。

如果你是 mac 用户,你需要安装pango和libffi,更不用说 python 了。

Mac 上的安装指南

brew install python pango libffi
(venv) pip install weasyprint
Run Code Online (Sandbox Code Playgroud)


Mik*_*nen 6

扩展Apple Silicon (M1) Mac上的现有答案:

如果您使用 Homebrew 安装了软件包,但在 下仍然找不到或链接它们/usr/local/lib,这是因为它们安装在 arm64 上,而是在 中找到/opt/homebrew/lib。

如果您使用的是与 Homebrew 一起安装的 Python,它应该无需任何额外工作即可工作,但是系统 Python 和任何托管 Python 版本(例如与 Pyenv 一起安装)将需要一些配置。

1. 手动符号链接

/usr/local/lib您可以链接/opt/homebrew/lib内容(只要您没有现有/usr/local/lib目录) ,而不是将每个库单独链接到:

sudo ln -s /opt/homebrew/lib /usr/local/lib
Run Code Online (Sandbox Code Playgroud)

只要您正在寻找的库不是来自仅桶式配方(这些配方必须单独链接),这就可以工作。

2.环境变量

很多答案都指向设置一些环境变量,例如LDFLAGS或DYLD_LIBRARY_PATH添加库的搜索路径,但根据我的测试,这些不适用于Python:

macOS 附带系统完整性保护 (SIP),除其他外,它可以清理子进程中的环境变量,例如 Python。任何以LD或开头的内容DYLD都将被清除,因此在终端配置文件中设置环境变量将不起作用。

您可以禁用 SIP来让这些功能正常工作,但 Apple 建议仅在需要时临时执行此操作。

如果您决定走这条路,这里有一些选择:

在 Homebrew 的Github 讨论中,通过设置回答了这个问题LDFLAGS:

export LDFLAGS=-L/opt/homebrew/lib
Run Code Online (Sandbox Code Playgroud)

同样,您可以添加必要的路径DYLD_LIBRARY_PATH

export DYLD_LIBRARY_PATH=/opt/homebrew/lib
Run Code Online (Sandbox Code Playgroud)