在 macOS 上使用 Anaconda 的 base 环境时,即使卸载了 conda 的 pyqt 包,Anaconda 基础环境中仍然包含 Qt 库(/opt/anaconda3/lib/libQt5Core.5.15.2.dylib)。这些库在 Python 启动时就被加载,与 pip 安装的 PyQt5 产生冲突,出现以下错误:
objc: Class QMacAutoReleasePoolTracker is implemented in both ...
You might be loading two sets of Qt binaries into the same process.
qt.qpa.plugin: Could not load the Qt platform plugin "cocoa"
这是最可靠和干净的解决方案。使用提供的脚本自动创建独立环境:
./setup_clean_env.sh
脚本会自动:
buff_client 的独立 conda 环境使用新环境:
conda activate buff_client
python src/main.py
或者直接使用启动脚本(会自动检测环境):
./run.sh
如果自动脚本不工作,可以手动创建:
# 创建新的 conda 环境(不安装 pyqt)
conda create -n buff_client python=3.12 -y
# 激活环境
conda activate buff_client
# 只安装 pip 的 PyQt5,不安装 conda 的 pyqt
pip install PyQt5 pyqt5-qt5 pyqt5-sip pyqt-fluent-widgets pyqt5-frameless-window
# 安装其他依赖
pip install -r requirements.txt
在 base 环境中尝试卸载:
conda remove pyqt pyqtwebengine --force
注意:这可能会失败,因为 conda 可能不允许移除某些依赖。即使成功,Anaconda 基础环境中可能仍有其他 Qt 库。
使用诊断脚本检查问题:
./fix_qt_conflict.sh
运行程序验证是否解决了问题:
python src/main.py
或者使用启动脚本:
./run.sh
启动脚本会自动检测环境,如果在 base 环境中会给出警告和建议。
检查当前安装的 Qt 相关包:
conda list | grep -E "^pyqt|^qt-main|^qt-webengine"
pip list | grep -i pyqt5
检查当前使用的 Python 环境:
which python
python -c "import sys; print(sys.executable)"
在 macOS 上,由于系统安全限制(System Integrity Protection),DYLD_FRAMEWORK_PATH 和 DYLD_LIBRARY_PATH 可能无法正常工作。即使设置了这些环境变量,Anaconda 的 Qt 库仍然可能在 Python 解释器启动时就被加载。
因此,使用独立的 conda 环境是最可靠的解决方案。