# Qt 库冲突问题解决方案 ## 问题描述 在 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" ``` ## 解决方案 ### ⭐ 方案 1:使用独立的 conda 环境(强烈推荐) 这是最可靠和干净的解决方案。使用提供的脚本自动创建独立环境: ```bash ./setup_clean_env.sh ``` 脚本会自动: - 创建名为 `buff_client` 的独立 conda 环境 - 只安装 pip 的 PyQt5(不安装 conda 的 pyqt) - 安装所有必要的依赖 使用新环境: ```bash conda activate buff_client python src/main.py ``` 或者直接使用启动脚本(会自动检测环境): ```bash ./run.sh ``` ### 方案 2:手动创建独立环境 如果自动脚本不工作,可以手动创建: ```bash # 创建新的 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 ``` ### 方案 3:尝试卸载 conda 的 pyqt(可能失败) 在 base 环境中尝试卸载: ```bash conda remove pyqt pyqtwebengine --force ``` **注意**:这可能会失败,因为 conda 可能不允许移除某些依赖。即使成功,Anaconda 基础环境中可能仍有其他 Qt 库。 ### 方案 4:诊断问题 使用诊断脚本检查问题: ```bash ./fix_qt_conflict.sh ``` ## 验证 运行程序验证是否解决了问题: ```bash python src/main.py ``` 或者使用启动脚本: ```bash ./run.sh ``` 启动脚本会自动检测环境,如果在 base 环境中会给出警告和建议。 ## 当前环境检查 检查当前安装的 Qt 相关包: ```bash conda list | grep -E "^pyqt|^qt-main|^qt-webengine" pip list | grep -i pyqt5 ``` 检查当前使用的 Python 环境: ```bash which python python -c "import sys; print(sys.executable)" ``` ## 为什么环境变量方法不起作用? 在 macOS 上,由于系统安全限制(System Integrity Protection),`DYLD_FRAMEWORK_PATH` 和 `DYLD_LIBRARY_PATH` 可能无法正常工作。即使设置了这些环境变量,Anaconda 的 Qt 库仍然可能在 Python 解释器启动时就被加载。 因此,**使用独立的 conda 环境是最可靠的解决方案**。