当我在 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
,它已安装在我的系统中。
我刚刚在我的 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
这解决了问题。
为了测试 Python 是否可以找到您可以运行的库
from ctypes.util import find_library
find_library('gobject-2.0') # Pass any other lib name as an argument
UPD。如果你用
python
安装homebrew
就没有这个问题。
如果您在虚拟环境中安装了
weasyprint
软件包,但没有安装一些必需的软件包,那么这可能就是原因。事实上,就我而言。
如果你是 mac 用户,你需要安装
pango
和 libffi
,更不用说 python 了。
brew install python pango libffi
(venv) pip install weasyprint
扩展 Apple Silicon (M1) Macs 上的现有答案:
如果您已经使用 Homebrew 安装了软件包,但在
/usr/local/lib
下仍然找不到或链接它们,那是因为它们安装在 arm64 上,而是在 /opt/homebrew/lib
中找到。
如果您使用的是通过 Homebrew 安装的 Python,它应该无需任何额外工作即可工作,但是系统 Python 和任何托管 Python 版本(例如通过 Pyenv 安装)将需要一些配置。
您可以链接
/usr/local/lib
内容(只要您没有现有的 /opt/homebrew/lib
目录),而不是将每个库单独链接到 /usr/local/lib
:
sudo ln -s /opt/homebrew/lib /usr/local/lib
只要您正在寻找的库不是来自仅桶式配方(这些配方必须单独链接),这就可以工作。
很多答案都指向设置一些环境变量,例如
LDFLAGS
或 DYLD_LIBRARY_PATH
来添加库的搜索路径,但根据我的测试,这些不适用于 Python:
macOS 附带系统完整性保护 (SIP),它可以清理子进程中的环境变量,例如 Python。任何以
LD
或 DYLD
开头的内容都将被清除,因此在终端配置文件中设置环境变量将不起作用。
您可以禁用 SIP 来让这些功能正常工作,但 Apple 建议仅在需要时暂时这样做。
如果您决定走这条路,这里有一些选择:
在 Homebrew 的 Github 讨论中 通过设置
LDFLAGS
回答了问题:
export LDFLAGS=-L/opt/homebrew/lib
同样,您可以将必要的路径添加到
DYLD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=/opt/homebrew/lib
自制程序更新后我遇到了同样的问题。事实证明,问题是由于较旧的
pango
lib 版本造成的。
我做到了
brew install pango
此升级了
pango
lib,从 1.48.2 -> 1.50.4,内部安装了 gobject 的最新版本作为 dep。我的问题得到了解决。
当我尝试在 Django 项目上使用
weasyprint
时,我遇到了同样的问题。
如果您使用的是 macOS,只需运行以下命令:
brew install pango
对于任何面临此问题并且同时使用 Pyenv 和 Homebrew 的人来说,最新的 Homebrew 有一个新命令
brew pyenv-sync
。这会将所有 Homebrew 安装的 python 版本同步到 Pyenv。
对我来说,只有这个建议有帮助:
brew install pango
brew install glib
brew link glib