MacOS Ventura Rosetta环境下装fontconfig仍遇fontconfig-1找不到的OSError
解决Django migrate报错找不到fontconfig-1的问题
问题背景
在M1 Mac(MacOS 13.0.1 Ventura)的Rosetta iTerm中执行python manage.py migrate时,arm64和i386架构终端均报错:
OSError: ctypes.util.find_library() did not manage to locate a library called 'fontconfig-1'
已通过对应架构的Homebrew安装fontconfig,但问题依旧,测试代码显示find_library('fontconfig')能找到路径,find_library('fontconfig-1')返回None。
核心原因
fontconfig-1并非独立包,它就是fontconfig库的带版本号命名形式,系统安装的fontconfig库文件名为libfontconfig.dylib,但程序在查找时指定了带版本号的名称,导致匹配失败。
解决方法
1. 创建符号链接匹配命名
针对不同架构的终端,分别为fontconfig库创建带版本号的符号链接:
- x86_64架构(Rosetta终端):
sudo ln -s /usr/local/lib/libfontconfig.dylib /usr/local/lib/libfontconfig-1.dylib - arm64架构终端:
sudo ln -s /opt/homebrew/lib/libfontconfig.dylib /opt/homebrew/lib/libfontconfig-1.dylib
2. 设置环境变量指定库路径
在终端中临时设置环境变量,让ctypes能正确找到库:
- x86_64架构:
export DYLD_LIBRARY_PATH=/usr/local/lib:$DYLD_LIBRARY_PATH - arm64架构:
export DYLD_LIBRARY_PATH=/opt/homebrew/lib:$DYLD_LIBRARY_PATH
若要永久生效,可将上述命令添加到~/.zshrc或~/.bashrc文件末尾,保存后执行source ~/.zshrc(或对应配置文件)生效。
3. 验证Python与Homebrew架构匹配
确保当前终端使用的Python和Homebrew架构一致,避免跨架构调用库的问题:
- 查看Python架构:
file $(which python) - 查看Homebrew架构:
brew --prefix- x86_64的Homebrew路径为
/usr/local - arm64的Homebrew路径为
/opt/homebrew
若架构不匹配,需切换对应架构的Python环境(比如用pyenv管理不同架构的Python版本)。
- x86_64的Homebrew路径为
内容的提问来源于stack exchange,提问作者Lazyer
相关产品推荐
相关产品推荐

