Arm64架构下PyQt5安装突然失败(SIP相关问题)
解决Xcode15升级后ARM64 macOS编译PyQt5失败(Q_PID未定义)的问题
问题核心
升级Xcode15后编译PyQt5源码时触发Q_PID is undefined错误,本质是Xcode15的SDK移除了Qt5中Q_PID的typedef定义,但PyQt5的SIP绑定代码未同步适配。
可行解决思路
1. 手动修改SIP绑定代码(适配Xcode15)
临时编译目录的文件会被自动清理,建议下载源码包手动修改:
- 下载PyQt5源码包:
pip download pyqt5 --no-binary :all: - 解压下载的
.tar.gz包,进入sip/QtCore目录 - 打开
qprocess.sip,找到报错的第99行,把Q_PID替换成pid_t(Q_PID原本就是pid_t的别名) - 回到源码根目录,重新执行安装命令:
pip install . --config-settings --confirm-license= --verbose
2. 用Conda直接安装预编译包(跳过源码编译)
Conda-forge提供了ARM64架构的PyQt5预编译包,无需手动编译:
- 先安装适配ARM64的Miniforge/Conda环境
- 创建并激活虚拟环境:
conda create -n pyqt_env python=3.10 conda activate pyqt_env - 安装PyQt5:
conda install pyqt=5
3. 临时降级Xcode到14.x版本
如果暂时不想修改代码或切换环境,可以降级Xcode:
- 从Apple开发者平台下载Xcode14.x的安装包
- 卸载Xcode15,安装14.x后执行:
xcode-select -s /Applications/Xcode.app/Contents/Developer - 重新执行之前的PyQt5编译安装命令即可恢复正常
4. 升级到PyQt6(长期适配方案)
PyQt6官方提供ARM64架构的pip预编译包,无需编译:
- 直接安装:
pip install pyqt6 - 注意:需要调整项目代码适配PyQt6的API变化(比如模块导入路径、部分类/方法名变更)
内容的提问来源于stack exchange,提问作者gernophil
相关产品推荐
相关产品推荐

