You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

M1芯片2020款MacBook Pro运行Python脚本触发Illegal hardware instruction错误求助

解决M1 Mac上zsh: illegal hardware instruction运行Python 3.6脚本的问题

我刚帮几个朋友处理过几乎一模一样的问题,核心就是M1芯片的ARM64架构和Python 3.6的兼容性冲突,具体分析和解决方案如下:

问题根源

M1是ARM架构的芯片,而Python 3.6发布时还没有ARM版Mac,官方从未适配过ARM64版本的Python 3.6。你通过conda创建的Python 3.6环境,实际是x86_64架构的版本,靠Rosetta 2转译运行。但像numpy这类依赖编译后C扩展的库,转译过程中很容易出现指令不兼容,直接触发illegal hardware instruction错误——这也是为什么不管运行什么脚本都会报错,因为Python解释器本身或底层依赖已经出了兼容性问题。

可行的解决方案

1. 升级Python到3.8及以上(最推荐)

从Python 3.8开始,官方正式支持ARM64架构的Mac,conda也能直接安装原生ARM版本的Python和依赖库,完全避开转译带来的问题。操作步骤:

  • (可选)删除有问题的旧环境:conda remove -n your_py36_env --all
  • 创建新的Python 3.9/3.10环境(选一个项目兼容的版本):conda create -n py39_env python=3.9 numpy
  • 激活环境:conda activate py39_env
  • 在VSCode中切换到这个环境的解释器,再运行脚本就正常了。

2. 用Rosetta终端运行Python 3.6(仅临时应急,不推荐长期用)

如果因为项目限制必须用Python 3.6,可以试试强制让终端在Rosetta模式下运行:

  • 找到「终端」应用,右键选「显示简介」,勾选「使用Rosetta打开」
  • 重启终端,在这个终端里重新创建Python 3.6环境、安装依赖
  • 此时安装的是x86_64版本的Python和库,Rosetta的转译会更完整,大概率能避开指令错误。但要注意:Python 3.6已经停止维护(2021年底结束支持),存在安全风险,不建议长期使用。

3. 检查conda的架构设置

运行conda info查看输出里的platform字段:

  • 如果是osx-arm64:说明conda在原生ARM模式下运行,安装Python 3.6只能拉取x86版本,容易出问题
  • 如果是osx-64:说明已经在Rosetta模式下,重新安装依赖可能解决问题,但还是不如升级Python版本靠谱。

内容的提问来源于stack exchange,提问作者T C

火山引擎 最新活动