M1 Mac运行PyQt6项目报mach-o架构不兼容(x86_64需arm64e)如何解决
问题根因
你遇到的架构不匹配报错和你猜想的arm64e、arm64差异无关,核心问题是你当前使用的Python是x86_64版本(通过Rosetta2转译运行),对应安装的PyQt6库也是x86_64架构,和你当前运行环境要求的arm架构不兼容。你当前用的/usr/local/bin/python3就是M1 Mac上典型的x86版本Python路径,原生arm版本的第三方软件默认会安装到/opt/homebrew路径下。
解决方案
按优先级推荐两种处理方式:
- 优先使用原生arm架构Python(性能更好,无兼容隐患)
- 先卸载当前x86环境下安装的PyQt6相关组件:
/usr/local/bin/python3 -m pip uninstall PyQt6 PyQt6-Qt6 PyQt6-sip -y- 安装适配arm64架构的Python,可直接从Python官网下载3.9及以上版本的arm安装包,也可通过arm版Homebrew执行
brew install python3安装 - 用新安装的arm版Python重新安装PyQt6:
# 替换为你arm版Python的实际路径 /path/to/arm/python -m pip install PyQt6- 用新的Python路径运行你的项目代码即可
- 临时兼容方案(不推荐长期使用)
右键点击终端应用,选择「显示简介」,勾选「使用Rosetta打开」,重启终端后直接运行原有代码即可正常加载x86版本的PyQt6库。
代码语法修正
除了架构问题,你的代码还存在几处语法错误,架构问题修复后需要修正以下内容才能正常运行:
QWidget.__init___(self)多写了一个下划线,修正为QWidget.__init__(self)self.load_depts、self.load_emps两行调用方法时缺括号,修正为self.load_depts()、self.load_emps()for i, e in self.emps:缺遍历枚举方法,修正为for i, e in enumerate(self.emps):
内容的提问来源于stack exchange,提问作者MrAhmed Alhamed
相关产品推荐
相关产品推荐

