#!/usr/bin/env bash set -euo pipefail # 切换到脚本所在目录,保证相对路径正确 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" echo "工作目录:$PWD" # 选择可用的 Python(优先 python3) if command -v python3 >/dev/null 2>&1; then PYTHON_CMD=python3 elif command -v python >/dev/null 2>&1; then PYTHON_CMD=python else echo "未找到 Python 可执行文件,请先安装 Python 3。" >&2 exit 1 fi # 如果没有 venv 或 venv 不完整则创建 if [ -d "venv" ] && [ -x "venv/bin/python" ]; then echo "虚拟环境已存在,激活中..." else echo "未检测到虚拟环境,使用 $PYTHON_CMD 创建 venv..." $PYTHON_CMD -m venv venv fi # 激活虚拟环境 # shellcheck source=/dev/null source venv/bin/activate echo "虚拟环境已激活:$(which python) ($(python --version 2>&1))" # 升级基础打包工具 pip install --upgrade pip setuptools wheel # 如果存在 requirements.txt,则按文件安装;否则安装默认依赖 if [ -f "requirements.txt" ]; then echo "检测到 requirements.txt,安装依赖..." pip install -r requirements.txt else DEFAULT_PKGS=(pyinstaller) echo "未找到 requirements.txt,检查并安装默认依赖:${DEFAULT_PKGS[*]}" for pkg in "${DEFAULT_PKGS[@]}"; do if pip show "$pkg" >/dev/null 2>&1; then echo "$pkg 已安装" else echo "正在安装 $pkg ..." pip install "$pkg" fi done fi # 清理旧的构建文件 echo "清理旧的构建产物..." rm -rf build dist fan.spec || true # 使用 PyInstaller 打包 echo "开始打包 fan.py ..." pyinstaller --onefile fan.py echo "打包完成!可执行文件位于 dist/ (查看 dist/ 目录获取文件名)"