MacOS M1开启Rosetta后Python包仍被识别为ARM架构报错如何解决
问题根因
- 你执行的
arch -x86_64 zsh仅将当前shell进程切换为x86_64模拟模式,但你使用的Python解释器本身是原生ARM64架构编译的版本。pip安装依赖时,pycocotools的C拓展模块会匹配Python解释器的架构编译,而非匹配shell的架构,因此哪怕终端运行在x86模式下,编译出来的_mask.cpython-39-darwin.so依然需要arm64e架构,和你安装的x86架构的依赖包不匹配。 - 另一个可能的原因是pip缓存了之前下载/编译的pycocotools安装包,重新安装时直接复用了旧版本,没有重新匹配架构编译。
修复方案
方案1:继续使用Rosetta模拟运行
- 在Rosetta模式终端中,先验证Python解释器架构,执行命令:
python3 -c "import platform; print(platform.machine())"
如果输出为arm64,说明当前Python为原生ARM版本,需要先安装x86_64架构的Python版本,可在Rosetta终端下通过Homebrew安装,或直接从Python官网下载x86_64版本的Python安装包安装。 - 清除pip本地缓存,执行命令:
pip cache purge - 以x86_64架构的Python为基础新建虚拟环境,激活后重新安装layoutparser及所有依赖即可。
方案2:原生ARM架构直接运行(无需Rosetta)
直接在原生ARM终端中执行以下操作:
- 安装系统依赖:
xcode-select --install - 强制从源码编译适配ARM架构的pycocotools,执行命令:
pip install --no-binary :all: pycocotools - 重新安装layoutparser即可正常运行代码。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

