MacOS M1 系统被 Python 软件包检测为 ARM,即使我使用的是 Rosetta

MacOS M1 system is detected as ARM by Python package even though I'm using Rosetta

我使用的是带有 M1(Apple ARM 架构)的 Macbook,我尝试使用 layoutparser library, which indirectly uses pycocotools:

运行以下 Python 代码
import layoutparser as lp
lp.Detectron2LayoutModel()

我收到错误消息:

[...]
ImportError: 
dlopen([...]/.venv/lib/python3.9/site-packages/pycocotools/_mask.cpython-39-darwin.so, 0x0002): 
tried: 
'[...]/.venv/lib/python3.9/site-packages/pycocotools/_mask.cpython-39-darwin.so' 
(mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e')), 
'/usr/local/lib/_mask.cpython-39-darwin.so' (no such file), 
'/usr/lib/_mask.cpython-39-darwin.so' (no such file)

对我来说至关重要的信息似乎是 [...] is an incompatible architecture (have 'x86_64', need 'arm64e') [...]。确实,我用的是Apple ARM架构,有时候有些软件不支持。这通常通过使用模拟 Intel-x64 架构的 Rosetta 来解决。所以我用 Rosetta (arch -x86_64 zsh) 启动一个终端,创建一个新的虚拟环境,重新安装依赖项,然后再次尝试 运行 代码 ...

... 我收到了与没有 Rosetta 时同样的错误:

[...] is an incompatible architecture (have 'x86_64', need 'arm64e') [...]

我已经仔细检查过 Rosetta 确实已激活:

> uname -m
x86_64

Rosetta 似乎可以正常工作。然而,根据错误消息,它似乎不起作用。

知道 Rosetta、库或其他什么可能有什么问题吗?我该如何尝试修复它?

Charles Duffy在评论中说明了问题,谢谢!

查看Python中的平台,果然是ARM:

> python -c 'import platform; print(platform.platform())'
macOS-12.0.1-arm64-i386-64bit

所以我一直在为 ARM 使用 Python 安装。

现在我从 Rosetta 终端安装 brew 然后 python3 并使用新安装的 Python 启动一个新的虚拟环境,这修复了它。

(This article 帮了我一点忙。)