81 lines
2.0 KiB
Bash
Executable File
81 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
||
# build.sh - 一键打包脚本
|
||
# 在对应架构的机器上执行(或用 Docker 交叉编译,见下方说明)
|
||
set -euo pipefail
|
||
|
||
ARCH=$(uname -m)
|
||
OUTPUT_NAME="nas-media-player-${ARCH}"
|
||
RELEASES_DIR="./releases"
|
||
|
||
echo "========================================"
|
||
echo " NAS Media Player 打包脚本"
|
||
echo " 当前架构: ${ARCH}"
|
||
echo "========================================"
|
||
|
||
# 1. 检查 Python 版本(建议 3.9+)
|
||
ARCH=$(uname -m)
|
||
|
||
if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "armv7l" ]; then
|
||
apt-get update
|
||
apt-get install -y \
|
||
python3 \
|
||
python3-pip \
|
||
python3-dev \
|
||
build-essential \
|
||
binutils \
|
||
python3.8-venv
|
||
fi
|
||
python3 --version
|
||
|
||
# 2. 创建并激活虚拟环境(隔离,避免污染系统)
|
||
echo "[1/5] 创建虚拟环境..."
|
||
python3 -m venv .venv-build
|
||
source .venv-build/bin/activate
|
||
|
||
# 3. 安装依赖
|
||
echo "[2/5] 安装依赖..."
|
||
pip install --upgrade pip -q
|
||
pip install \
|
||
pyinstaller \
|
||
fastapi \
|
||
uvicorn \
|
||
aiofiles \
|
||
pydantic \
|
||
python-multipart \
|
||
-q
|
||
|
||
# 4. 执行打包
|
||
echo "[3/5] 开始打包 (PyInstaller)..."
|
||
pyinstaller nas-media-player.spec \
|
||
--clean \
|
||
--noconfirm
|
||
|
||
# 5. 检查产物
|
||
BINARY="./dist/nas-media-player"
|
||
if [ ! -f "${BINARY}" ]; then
|
||
echo "❌ 打包失败!未找到 ${BINARY}"
|
||
exit 1
|
||
fi
|
||
|
||
# 6. 重命名并归档
|
||
mkdir -p "${RELEASES_DIR}"
|
||
cp "${BINARY}" "${RELEASES_DIR}/${OUTPUT_NAME}"
|
||
chmod +x "${RELEASES_DIR}/${OUTPUT_NAME}"
|
||
|
||
# 显示文件大小
|
||
SIZE=$(du -sh "${RELEASES_DIR}/${OUTPUT_NAME}" | cut -f1)
|
||
echo ""
|
||
echo "========================================"
|
||
echo "✅ 打包成功!"
|
||
echo " 产物路径: ${RELEASES_DIR}/${OUTPUT_NAME}"
|
||
echo " 文件大小: ${SIZE}"
|
||
echo "========================================"
|
||
|
||
# 7. 快速验证(不启动服务,只检查 --help)
|
||
echo "[5/5] 验证二进制可执行..."
|
||
"${RELEASES_DIR}/${OUTPUT_NAME}" --version 2>/dev/null || true
|
||
echo "验证完成(如无错误输出则正常)"
|
||
|
||
# 清理虚拟环境
|
||
deactivate
|