【问题标题】:MacOS M1 system is detected as ARM by Python package even though I'm using Rosetta即使我使用的是 Rosetta,MacOS M1 系统也被 Python 包检测为 ARM
【发布时间】:2021-12-06 23:29:29
【问题描述】:

我使用的是 M1(Apple ARM 架构)的 Macbook,我尝试使用 layoutparser 库运行以下 Python 代码,该库间接使用 pycocotools

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') [...]。确实,我用的是苹果的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 或图书馆或其他什么问题可能是什么,以及我该如何尝试解决它?

【问题讨论】:

  • 你真的有 Python 的 x86_64 副本吗?如果您只有一个 arm64 Python,那么无论您的系统如何识别自己,它都永远无法加载 x86_64 共享库。
  • (Rosetta 在逐个进程级别工作;它不允许一种架构的可执行文件加载另一种架构的库:当您的可执行文件是为一个 CPU 构建时,它加载的每个库都需要编译时支持相同的 CPU)。
  • python -c 'import platform; print(platform.platform())' 的输出将是包含在问题中的好信息——也许也是打开 REPL 的横幅)。
  • 感谢 Charles,您的 cmets 非常有帮助并解决了问题!

标签: python apple-m1 cpython rosetta


【解决方案1】:

Charles Duffy解释了cmets中的问题,谢谢! ?

当我在 Python 中查看平台时,确实是 ARM:

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

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

现在我从 Rosetta 终端安装了 brewpython3,并使用新安装的 Python 启动了一个全新的虚拟环境,这解决了它。

This article 帮了我一点忙。)

【讨论】:

    猜你喜欢
    • 2022-11-09
    • 2022-01-10
    • 2021-11-26
    • 2021-12-16
    • 2019-10-17
    • 1970-01-01
    • 2021-12-16
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多