QT_CONFLICT_FIX.md 2.7 KB

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 环境(强烈推荐)

这是最可靠和干净的解决方案。使用提供的脚本自动创建独立环境:

./setup_clean_env.sh

脚本会自动:

  • 创建名为 buff_client 的独立 conda 环境
  • 只安装 pip 的 PyQt5(不安装 conda 的 pyqt)
  • 安装所有必要的依赖

使用新环境:

conda activate buff_client
python src/main.py

或者直接使用启动脚本(会自动检测环境):

./run.sh

方案 2:手动创建独立环境

如果自动脚本不工作,可以手动创建:

# 创建新的 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 环境中尝试卸载:

conda remove pyqt pyqtwebengine --force

注意:这可能会失败,因为 conda 可能不允许移除某些依赖。即使成功,Anaconda 基础环境中可能仍有其他 Qt 库。

方案 4:诊断问题

使用诊断脚本检查问题:

./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 环境是最可靠的解决方案。