1. 场景还原
最近公司开发需求要用到WeasyPrint将发票在后端导出为PDF,安装了WeasyPrint==52.5版本后启动项目报错:OSError: cannot load library 'gobject-2.0-0'
设备:Macbook Apple M1 Pro
以下是M1芯片的错误历程,只需要针对M芯片苹果电脑的解决方法请直接跳到3.解决方法
首先,参考WeasyPring官方文档和搜索stack overflow:Python: OSError: cannot load library libcairo.so.2使用homebrew安装pango和cairo这两个库以及相关的依赖仍然报错。
然后,搜索另一个解决方案stack overflow: gobject-2.0-0 not able to load on macbook设置软链接开始报另一个错:tried: '/usr/local/lib/gobject-2.0-0' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64'))
2. 错误原因
根本原因是macOS系统缺少相关依赖,使用homebrew安装pango和cairo这两个库会将对应的依赖都安装上。
安装之后仍然报错是因为M芯片的homebrew安装的软件包的路径默认是/opt/homebrew/opt(M芯片mac),但是weasyprint不知道这个路径,所以需要添加软链接确保能找到对应依赖。
添加软链接还是报错是因为相关依赖不支持M芯片的系统,需要安装Intel芯片(x86_64 架构)的库。
3. 解决方案
1. 在 M 系列芯片的 Mac 上安装 Intel 版本的 Homebrew
首先需要在 M 系列芯片的 Mac 上安装 Intel 版本的 Homebrew,以便安装和运行 x86_64 架构的软件。以下是具体的安装步骤:
安装 Rosetta 2
在 M 系列芯片 Mac 上,Rosetta 2 是用于模拟运行 Intel 架构应用的翻译层。可以通过以下命令在终端安装 Rosetta 2(如果已经安装则可忽略此步骤):
softwareupdate --install-rosetta
在 Rosetta 模式下打开终端
要安装 Intel 版本的 Homebrew,需要在 Rosetta 模式下打开终端。可以这样操作:
• 打开访达前往 应用程序 > 实用工具 > 终端。
• 右键点击 终端,选择 显示简介。
• 在简介窗口中勾选 使用 Rosetta 打开。
这样打开的终端将以 x86_64 模式运行,安装完后记得取消勾选,如果你使用iterm2,操作类似
安装 Intel 版本的 Homebrew
在 Rosetta 模式下的终端输入以下命令,下载并安装 Intel 版本的 Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
如果下载很慢,可使用以下命令:
arch -x86_64 /bin/bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install.sh)"
设置 Intel Homebrew 的路径
安装完成后,Intel 版本的 Homebrew 会被安装在 /usr/local 目录下,而 M 系列芯片原生的 Homebrew 默认安装在 /opt/homebrew 下。因此,可以通过设置路径来切换不同架构的 Homebrew。
编辑~/.zshrc
vim ~/.zshrc
添加以下别名,这样就能实现两个版本的homebrew共存:
# intel homebrew
alias ibrew="arch -x86_64 /usr/local/bin/brew"
# arm homebrew
alias brew='arch -arm64 /opt/homebrew/bin/brew'
保存退出后分别运行brew --version和ibrew --version查看是否生效
2. 使用Intel 版本的 Homebrew安装依赖
使用以下命令安装依赖即可解决依赖报错
ibrew install pango libffi