Skip to content

Latest commit

 

History

History
167 lines (126 loc) · 4.08 KB

File metadata and controls

167 lines (126 loc) · 4.08 KB

File2LongImage macOS 应用构建完整解决方案

问题分析

根本原因

  1. py2app 与 Python 3.12 + Anaconda 不兼容

    • 动态库链接问题(libffi.8.dylib, libexpat等)
    • Python 环境混淆(系统Python vs Anaconda Python)
    • 复杂的依赖关系导致打包失败
  2. "Launch error" 错误原因

    • py2app 无法正确处理 Anaconda 环境的库依赖
    • macOS 安全机制阻止未签名的动态库加载
    • Python 3.12 的新特性与 py2app 0.28 不完全兼容

三种解决方案

方案一:PyInstaller(推荐) ✅

优点

  • 更好的依赖处理
  • 自动包含所有必需的动态库
  • 支持 Python 3.12
  • 生成真正独立的应用包

使用方法

# 运行构建脚本
./build_with_pyinstaller.sh

# 或手动构建
pyinstaller File2LongImage.spec --clean --noconfirm

生成的应用File2LongImage_PyInstaller.app

方案二:轻量级包装器 ✅

优点

  • 最简单可靠
  • 无需处理复杂的依赖
  • 易于调试和维护

实现

File2LongImage.app/
├── Contents/
│   ├── Info.plist
│   ├── MacOS/
│   │   └── launcher (bash脚本)
│   └── Resources/
│       ├── mac_app_parallel.py
│       ├── config.py
│       ├── error_logger.py
│       └── assets/

生成的应用File2LongImage.app

方案三:虚拟环境 + py2app(备选)

步骤

# 使用系统 Python 创建干净的虚拟环境
/usr/bin/python3 -m venv venv_clean
source venv_clean/bin/activate
pip install -r requirements.txt
pip install py2app
python setup_parallel.py py2app

当前可用的应用

  1. File2LongImage_PyInstaller.app - PyInstaller 构建的独立应用
  2. File2LongImage.app - 轻量级包装器应用
  3. run_parallel_app.command - 命令行启动脚本

故障排除

如果遇到 "Launch error"

  1. 确认运行的是正确的应用

    • 删除 dist/ 目录中的旧应用
    • 使用 File2LongImage_PyInstaller.appFile2LongImage.app
  2. 权限问题

    # 清除隔离属性
    xattr -cr File2LongImage_PyInstaller.app
    
    # 或在系统设置中允许
    系统设置 → 安全性与隐私 → 仍要打开
  3. 依赖缺失

    # 安装所有依赖
    pip install pdf2image pillow psutil
    
    # 安装系统依赖
    brew install poppler
    brew install --cask libreoffice

调试方法

  1. 查看详细错误

    # 从终端运行
    ./File2LongImage_PyInstaller.app/Contents/MacOS/File2LongImage
  2. 查看系统日志

    # 打开控制台应用
    open -a Console
    # 搜索 "File2LongImage"
  3. 验证 Python 环境

    which python3
    python3 --version
    pip list | grep -E "pdf2image|Pillow|psutil"

性能对比

方案 启动速度 文件大小 可靠性 维护难度
PyInstaller 慢(3-5秒) 大(~200MB)
轻量级包装 快(<1秒) 小(<10MB)
py2app 中(2-3秒) 中(~100MB)

最佳实践建议

  1. 开发阶段:使用轻量级包装器或直接运行 Python 脚本
  2. 分发阶段:使用 PyInstaller 构建独立应用
  3. 企业部署:考虑代码签名和公证

未来改进方向

  1. 原生应用开发

    • 使用 Swift/SwiftUI 创建原生 macOS 应用
    • Python 作为后端服务
  2. Electron 方案

    • 前端:Electron + React/Vue
    • 后端:Python FastAPI
  3. Docker 容器化

    • 完全隔离的运行环境
    • 一致的依赖管理

总结

当前推荐使用 PyInstaller 方案,它能生成真正独立的 macOS 应用,解决了 py2app 的所有兼容性问题。

已验证可用的应用:

  • File2LongImage_PyInstaller.app - 完全独立,无需Python环境
  • File2LongImage.app - 轻量级,需要系统Python
  • run_parallel_app.command - 开发测试用

更新时间:2024-09-02 版本:2.0.0