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。
如果您weasyprint在虚拟环境中安装了软件包,但没有安装一些必需的软件包,那么这可能就是原因。事实上,就我而言。
如果你是 mac 用户,你需要安装pango和libffi,更不用说 python 了。
brew install python pango libffi
(venv) pip install weasyprint
Run Code Online (Sandbox Code Playgroud)
扩展Apple Silicon (M1) Mac上的现有答案:
如果您使用 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
Run Code Online (Sandbox Code Playgroud)
只要您正在寻找的库不是来自仅桶式配方(这些配方必须单独链接),这就可以工作。
很多答案都指向设置一些环境变量,例如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)
| 归档时间: |
|
| 查看次数: |
14917 次 |
| 最近记录: |