ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/numpy/core/_multiarray_umath.cpython-311-darwin.so

这个报错通常发生在 macOS 环境下,使用 Python 3.11 的框架安装方式导入 transformers 时,因本地安装的 NumPy 二进制文件架构与 CPU 架构不匹配(x86_64 与 arm64)导致导入失败。优先排查 NumPy 的安装架构与 Python 解释器架构是否一致。

快速结论:这个报错通常发生在 macOS 环境下,使用 Python 3.11 的框架安装方式导入 transformers 时,因本地安装的 NumPy 二进制文件架构与 CPU 架构不匹配(x86_64 与 arm64)导致导入失败。优先排查 NumPy 的安装架构与 Python 解释器架构是否一致。

适用环境:macOS Tahoe 26.6.2;Python 3.11(路径 /Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11);NumPy 版本 1.24.3;Hugging Face Transformers(transformers-cli 命令触发导入)。

最快修复方案:暂无确认的一步修复方案。Issue 讨论中维护者未给出直接针对该 ImportError 的解决方案,报告者未被引导修复 NumPy 架构问题,而是转向了提示信息的处理。

注意事项:该报错与 transformers 的弃用警告(get_extended_attention_mask deprecation)属于两件独立事件。前者是 NumPy 架构不兼容导致的崩溃,后者是需要等待版本更新才能消除的代码提示。不要混为一谈。

问题场景

用户在 macOS Tahoe 26.6.2 上运行 transformers-cli env 时,命令在导入 transformers 包的过程中触发异常。实际崩溃点是 transformers 在初始化时执行 import numpy as np,NumPy 的 C 扩展加载失败,最终导致整个 transformers-cli 无法启动。

报错原文

File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/numpy/core/overrides.py", line 6, in <module>
    from numpy.core._multiarray_umath import (
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/numpy/core/_multiarray_umath.cpython-311-darwin.so, 0x0002): tried: '/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/numpy/core/_multiarray_umath.cpython-311-darwin.so' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64e.v1' or 'arm64' or 'arm64'))
...
  * The Python version is: Python3.11 from "/Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11"
  * The NumPy version is: "1.24.3"

原因分析

根据报错原文中 have 'x86_64', need 'arm64e' or 'arm64e.v1' or 'arm64' 的提示,直接原因是当前 Python 解释器正以 Apple Silicon 原生架构(arm64)运行,而 NumPy 安装包中的 _multiarray_umath.cpython-311-darwin.so 是为 Intel(x86_64)架构编译的二进制文件,架构不匹配导致动态库无法加载。可能原因是 Python 本体与 NumPy 分别通过不同渠道或不同架构安装,例如 Python 官网 pkg 安装包版本与 pip 默认下载源不匹配,或使用了 Rosetta 转译的终端安装的包。

环境排查

  • 确认 Python 解释器真实运行架构:在终端中执行 file $(which python3),查看输出是 arm64 还是 x86_64
  • 确认 NumPy 扩展文件架构:检查 _multiarray_umath.cpython-311-darwin.so 所属架构,使用 file 命令查看该文件。
  • 核对默认 Python 是否为 /Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11 框架安装版本,以及 pip 是否指向同一 Python。
  • 确认 NumPy 安装来源:如果通过 pip 安装,检查是否因 Python 本身被 Rosetta 转译而导致 pip 下载了 x86_64 版本的 wheel。

解决步骤

  1. 该步骤需要先确认架构问题:检查 Python 与 NumPy 的架构是否一致。
  2. 如果 Python 为 arm64、NumPy 为 x86_64(即本次报错的场景),可优先尝试卸载当前 NumPy 并重新安装原生 arm64 版本,以覆盖二进制文件。
  3. 如果重新安装后仍导入失败,可考虑使用 conda 或 python.org 提供的原生 arm64 安装包重新搭建 Python 环境。
  4. 针对报错标题中提到的 get_extended_attention_mask is deprecated 警告:该警告与 ImportError 是两回事,且该警告来自远程模型仓库的代码(huggingface.co/dicta-il/dictabert-parse),需要模型作者更新代码或等待 transformers 下一个大版本发布,届时该弃用提示会被彻底移除。维护者明确说明该弃用警告不会在当前 pip 版本中移除,需要从 GitHub 安装 main 分支的 transformers 才能提前消除。

验证方法

运行 python3 -c "import numpy; print(numpy.__version__)"。如果不再抛出 dlopen 架构错误,说明 NumPy 导入恢复正常;随后再次运行 transformers-cli env,如果能正常输出环境信息,则表示问题已解决(但弃用警告仍可能出现,需按远程代码仓库的更新节奏等待消除)。

参考来源

huggingface/transformers #48449

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 21672

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注