Mac M1安装Python库时报ModuleNotFoundError: No module named '_ctypes'怎么办
ModuleNotFoundError: No module named '_ctypes'
这个错误本质是Python的C扩展适配模块_ctypes缺失,Mac M1设备上出现该问题的核心原因是编译安装Python时未找到系统依赖库libffi:M1架构的Mac默认将Homebrew安装的libffi放在/opt/homebrew的非标准路径下,Python编译阶段无法识别该路径就不会生成_ctypes模块,后续安装调用ctypes的第三方库时就会抛出报错。
第一步:安装系统依赖libffi
执行命令:brew install libffi
如果未安装Homebrew,先完成Homebrew的基础安装再执行上述命令。第二步:配置libffi环境变量
将以下内容写入当前shell的配置文件(zsh对应/.zshrc,bash对应/.bash_profile):
export LDFLAGS="-L/opt/homebrew/opt/libffi/lib" export CPPFLAGS="-I/opt/homebrew/opt/libffi/include" export PKG_CONFIG_PATH="/opt/homebrew/opt/libffi/lib/pkgconfig"
写入完成后执行source ~/.zshrc(bash对应source ~/.bash_profile)让配置生效。
第三步:重新安装对应Python版本
如果使用pyenv管理Python版本,执行:pyenv uninstall <你的Python版本号>pyenv install <你的Python版本号>
如果使用官方安装包安装的Python,直接下载对应M1架构的官方安装包覆盖安装即可。第四步:验证修复结果
执行命令:python3 -c "import ctypes"
无任何输出即代表修复完成,可正常安装之前报错的第三方库。
- 若使用conda管理Python环境,无需手动配置环境变量,直接执行
conda install libffi后重新安装对应Python版本即可。
- 不要修改Mac系统自带的Python环境,建议使用pyenv、conda等工具管理独立Python版本,避免破坏系统基础依赖
- 执行命令时注意替换对应你自己的Python版本号、匹配当前使用的shell类型,避免配置不生效
内容的提问来源于stack exchange,提问作者user3447228

