苹果M1芯片运行Flask项目时cairo包架构不匹配问题求助
问题根因
该报错为Apple Silicon(M1系列)设备特有的架构不兼容问题:
- 你最初通过MacPorts安装的cairo为x86_64架构二进制文件,无法被arm64架构的Python进程加载,报错信息中的
mach-o, but wrong architecture就是直接证明 - 后续通过Homebrew安装的cairo未被识别,是因为M1设备上Homebrew的默认库路径
/opt/homebrew/lib没有被加入系统动态库搜索路径,Python的cairocffi库无法找到对应动态文件
解决方案
步骤1:清理旧的冲突安装
- 卸载MacPorts安装的cairo:
sudo port uninstall cairo - 卸载所有已安装的cairo版本,避免多版本冲突:
brew uninstall --force cairo - 卸载相关Python依赖包,避免缓存影响:
pip uninstall -y cairocffi weasyprint md2pdf
步骤2:安装原生arm64架构cairo并配置路径
注意:执行以下操作前确认你的终端没有开启Rosetta 2转译,右键终端图标点击「显示简介」,确认「使用Rosetta打开」选项未勾选
- 安装Homebrew原生arm64版本的cairo及相关依赖:
brew install cairo pango gdk-pixbuf libffi - 编辑你的shell配置文件(zsh对应
~/.zshrc,bash对应~/.bash_profile),添加以下两行配置,将Homebrew的库路径加入系统搜索路径:
export DYLD_LIBRARY_PATH=/opt/homebrew/lib:$DYLD_LIBRARY_PATH export PKG_CONFIG_PATH=/opt/homebrew/lib/pkgconfig:$PKG_CONFIG_PATH
- 执行配置生效命令:
source ~/.zshrc(若使用bash则替换为source ~/.bash_profile)
步骤3:重新安装Python依赖
- 强制重装cairocffi,确保编译时能找到arm架构的cairo库:
pip install --no-cache-dir cairocffi - 安装剩余依赖包:
pip install weasyprint md2pdf
验证配置是否生效
执行以下命令,若正常输出版本号则配置成功:python -c "import cairocffi; print(cairocffi.cairo_version_string())"
内容的提问来源于stack exchange,提问作者Roben
相关产品推荐
相关产品推荐

