Mac M1芯片执行Python脚本报错(M2芯片运行正常)求解决方案
Mac M1运行PyQt5脚本出现Symbol not found错误的解决思路
这个错误是因为PyQt5依赖的QtCore框架调用了系统libc库中不存在的C标准库符号,核心原因是M1和M2的系统环境、依赖库版本或软件架构适配性差异导致的,以下是具体解决方向:
检查并升级系统版本
错误中的__ZTVNSt3__13pmr25monotonic_buffer_resourceE是C17引入的符号,如果你M1的系统版本低于macOS Ventura(13.0),系统自带的libc库可能没有这个符号。对比M2的系统版本,把M1的macOS升级到同版本或更高版本,再重新运行脚本。重新安装适配M1原生架构的PyQt5
- 先卸载现有PyQt5:
pip uninstall -y PyQt5 - 确保你的Python是M1原生arm64版本,执行以下命令验证:
如果输出是python3 -c "import platform; print(platform.machine())"x86_64,说明你用的是Rosetta转译的Python,需要重新安装arm64架构的Python(比如从Python官网下载arm64安装包,或用pyenv安装arm64版本)。 - 安装适配arm64的PyQt5,优先选择支持Python3.12的版本:
若仍有问题,尝试强制从源码编译安装:pip install PyQt5==5.15.10pip install PyQt5 --no-binary :all:
- 先卸载现有PyQt5:
切换到PyQt6替代PyQt5
PyQt6对Apple Silicon的兼容性更好,且完全支持Python3.12:- 卸载PyQt5并安装PyQt6:
pip uninstall -y PyQt5 && pip install PyQt6 - 修改脚本中的导入语句,适配PyQt6的API(比如
from PyQt5 import QtCore, QtGui, QtWidgets改为from PyQt6 import QtCore, QtGui, QtWidgets,部分类的使用方式有细微调整)。
- 卸载PyQt5并安装PyQt6:
降级Python版本
Python3.12属于较新版本,部分PyQt5版本的适配性可能不足。可以降级到Python3.11(对PyQt5兼容性更成熟),再重新安装PyQt5测试。
内容的提问来源于stack exchange,提问作者Fred
相关产品推荐
相关产品推荐

