#!/bin/bash # CutThenThink 简化打包脚本 set -e echo "===================================" echo "CutThenThink 打包脚本" echo "===================================" # 使用系统Python和pip PYTHON="python3" PIP="python3 -m pip" echo "" echo "1/4. 安装打包工具..." $PIP install --user pyinstaller 2>/dev/null || echo " PyInstaller可能已安装" echo "" echo "2/4. 安装项目依赖..." $PIP install --user -r requirements.txt 2>/dev/null || echo " 依赖可能已安装" echo "" echo "3/4. 创建应用入口(如果不存在)..." if [ ! -f "src/main.py" ]; then cat > src/main.py << 'PYEOF' #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ CutThenThink 应用入口 """ import sys import os # 添加src目录到路径 current_dir = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, current_dir) from gui.main_window import main if __name__ == "__main__": main() PYEOF fi echo "" echo "4/4. 开始打包..." echo "NOTE: 使用自定义 hooks 排除与 Python 3.13 不兼容的 ML 库" $PYTHON -m PyInstaller \ --name "CutThenThink" \ --windowed \ --onefile \ --add-data "src:src" \ --runtime-hook=pyi_hooks/pyi_rth_ignore_torch.py \ --additional-hooks-dir=pyi_hooks \ --hidden-import=PyQt6.QtCore \ --hidden-import=PyQt6.QtGui \ --hidden-import=PyQt6.QtWidgets \ --hidden-import=sqlalchemy \ --hidden-import=sqlalchemy.orm \ --hidden-import=PIL \ --hidden-import=PIL.Image \ --hidden-import=PIL.ImageEnhance \ --hidden-import=PIL.ImageFilter \ --hidden-import=numpy \ --hidden-import=pyperclip \ --hidden-import=tkinter \ --hidden-import=tkinter.ttk \ --hidden-import=tkinter.scrolledtext \ --hidden-import=tkinter.messagebox \ --hidden-import=yaml \ --hidden-import=requests \ --collect-all pyqt6 \ --exclude-module=torch \ --exclude-module=transformers \ --exclude-module=tensorflow \ --exclude-module=onnx \ --exclude-module=onnxruntime \ --exclude-module=sentencepiece \ --exclude-module=tokenizers \ --exclude-module=diffusers \ --exclude-module=accelerate \ --exclude-module=datasets \ --exclude-module=huggingface_hub \ --exclude-module=safetensors \ src/main.py echo "" echo "===================================" echo "打包完成!" echo "可执行文件: dist/CutThenThink" echo "===================================" # 测试运行提示 echo "" read -p "是否测试运行?(y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "启动测试..." ./dist/CutThenThink fi