fix_qt_conflict.sh 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #!/bin/bash
  2. # 修复 Qt 库冲突的脚本
  3. # 使用 install_name_tool 修改 PyQt5 库的链接路径
  4. echo "Qt 库冲突修复脚本"
  5. echo "=================="
  6. echo ""
  7. # 获取脚本所在目录
  8. SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
  9. cd "$SCRIPT_DIR"
  10. # 查找 PyQt5 的安装路径
  11. PYQT5_PATH=""
  12. for site_pkg in $(python -c "import site; print(' '.join(site.getsitepackages()))" 2>/dev/null); do
  13. pyqt5_candidate="$site_pkg/PyQt5"
  14. if [ -d "$pyqt5_candidate" ]; then
  15. PYQT5_PATH="$pyqt5_candidate"
  16. break
  17. fi
  18. done
  19. if [ -z "$PYQT5_PATH" ]; then
  20. echo "❌ 未找到 PyQt5 安装路径"
  21. exit 1
  22. fi
  23. echo "找到 PyQt5 路径: $PYQT5_PATH"
  24. echo ""
  25. # 检查 Anaconda 的 Qt 库路径
  26. ANACONDA_QT_LIB="/opt/anaconda3/lib/libQt5Core.5.15.2.dylib"
  27. if [ ! -f "$ANACONDA_QT_LIB" ]; then
  28. echo "⚠️ 未找到 Anaconda 的 Qt 库,可能不需要修复"
  29. exit 0
  30. fi
  31. echo "检测到 Anaconda Qt 库: $ANACONDA_QT_LIB"
  32. echo ""
  33. # 查找 PyQt5 的 Qt 库
  34. PYQT5_QT_CORE="$PYQT5_PATH/Qt5/lib/QtCore.framework/Versions/5/QtCore"
  35. if [ ! -f "$PYQT5_QT_CORE" ]; then
  36. echo "❌ 未找到 PyQt5 的 QtCore 库"
  37. exit 1
  38. fi
  39. echo "找到 PyQt5 QtCore: $PYQT5_QT_CORE"
  40. echo ""
  41. # 检查是否需要修复
  42. echo "检查库的依赖关系..."
  43. if otool -L "$PYQT5_QT_CORE" | grep -q "$ANACONDA_QT_LIB"; then
  44. echo "⚠️ 检测到 PyQt5 链接到 Anaconda 的 Qt 库"
  45. echo ""
  46. echo "注意: 使用 install_name_tool 修改库链接可能很复杂且容易出错"
  47. echo "推荐方案: 使用独立的 conda 环境"
  48. echo ""
  49. echo "运行以下命令创建干净的环境:"
  50. echo " ./setup_clean_env.sh"
  51. echo ""
  52. read -p "是否继续尝试修复? (y/n): " -n 1 -r
  53. echo
  54. if [[ ! $REPLY =~ ^[Yy]$ ]]; then
  55. exit 0
  56. fi
  57. else
  58. echo "✅ PyQt5 未直接链接到 Anaconda 的 Qt 库"
  59. echo "问题可能在其他地方,建议使用独立环境"
  60. exit 0
  61. fi
  62. echo ""
  63. echo "⚠️ 自动修复可能不安全,建议手动创建独立环境"
  64. echo "请运行: ./setup_clean_env.sh"