From e0249d65d8a87d51f40b7b9c7252ae69e317621b Mon Sep 17 00:00:00 2001 From: Tian jianyong <11429339@qq.com> Date: Thu, 28 Nov 2024 15:59:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20Linux=20=E6=89=93=E5=8C=85?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/build_linux.sh | 87 ++++++++++++++++++++++++++++++++++++++++++ scripts/setup_env.sh | 7 ++++ scripts/setup_linux.sh | 36 +++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 scripts/build_linux.sh create mode 100644 scripts/setup_linux.sh diff --git a/scripts/build_linux.sh b/scripts/build_linux.sh new file mode 100644 index 0000000..f92c912 --- /dev/null +++ b/scripts/build_linux.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +# 确保脚本在错误时退出 +set -e + +echo "Starting packaging for Linux..." + +# 创建虚拟环境 +python3 -m venv .venv +source .venv/bin/activate + +# 安装依赖 +echo "Installing dependencies..." +pip install -e . + +# 构建前端 +echo "Building frontend..." +cd frontend +npm install +npm run build +# 把构建好的文件直接复制到 frontend 目录 +cp -r dist/* . +rm -rf dist +cd .. + +# 创建必要的目录 +mkdir -p logs data models + +# 使用 PyInstaller 打包 +echo "Packaging with PyInstaller..." +pyinstaller --clean \ + --add-data "src/loitering_munition_data.sql:data" \ + --add-data "src/rocket_artillery_data.sql:data" \ + --add-data "src/manufacturer_data.sql:data" \ + --add-data "src/schema.sql:data" \ + --add-data "config.py:." \ + --add-data "src:src" \ + --add-data "frontend:frontend" \ + --add-data "logs:logs" \ + --add-data "data:data" \ + --add-data "models:models" \ + --collect-all "xgboost" \ + --collect-all "lightgbm" \ + --collect-all "torch" \ + --collect-all "sklearn" \ + --collect-all "numpy" \ + --collect-all "pandas" \ + --collect-all "sqlalchemy" \ + --collect-all "pymysql" \ + --collect-all "cryptography" \ + --collect-all "flask" \ + --collect-all "flask_cors" \ + --hidden-import "xgboost.testing" \ + --hidden-import "torch.utils.tensorboard" \ + --hidden-import "pytest" \ + run.py + +# 创建启动脚本 +echo "Creating start script..." +cat > src/start.sh << 'EOF' +#!/bin/bash +export FLASK_DEBUG=false +export MYSQL_HOST=localhost +export MYSQL_USER=root +export MYSQL_PASSWORD=123456 +export MYSQL_DB=equipment_cost_db +echo "Starting Cost Prediction System..." +./run +xdg-open http://localhost:5001 +EOF + +# 复制启动脚本 +cp src/start.sh dist/run/ +chmod +x dist/run/start.sh + +# 创建发布包 +echo "Creating release package..." +version=$(grep "version" pyproject.toml | cut -d'"' -f2) +mkdir -p dist/release +cp -r dist/run/* dist/release/ + +# 创建 tar.gz 包 +cd dist +tar czf "cost-prediction-${version}-linux.tar.gz" release/ +cd .. + +echo "Package completed: dist/cost-prediction-${version}-linux.tar.gz" \ No newline at end of file diff --git a/scripts/setup_env.sh b/scripts/setup_env.sh index 159a2db..4e685d3 100755 --- a/scripts/setup_env.sh +++ b/scripts/setup_env.sh @@ -1,5 +1,12 @@ #!/bin/bash +# 此脚本用于设置 Python 开发环境 +# 主要用于: +# 1. 开发环境初始化 +# 2. 确保正确的 Python 版本 +# 3. 安装项目依赖 +# 注意:在运行此脚本前,请先运行 setup_linux.sh 安装系统依赖 + # 检查 pyenv 是否安装 if ! command -v pyenv &> /dev/null; then echo "pyenv not found. Installing..." diff --git a/scripts/setup_linux.sh b/scripts/setup_linux.sh new file mode 100644 index 0000000..df5bb12 --- /dev/null +++ b/scripts/setup_linux.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# 此脚本用于安装 Linux 系统级依赖 +# 主要用于: +# 1. 打包环境准备 +# 2. 新系统的初始化 +# 3. CI/CD 环境设置 + +# 更新包列表 +sudo apt update + +# 安装系统依赖 +echo "Installing system dependencies..." +sudo apt install -y \ + python3.11 \ # Python 3.11 解释器 + python3.11-venv \ # Python 虚拟环境支持 + python3-pip \ # Python 包管理器 + build-essential \ # 编译工具 + python3.11-dev \ # Python 开发库 + nodejs \ # Node.js(用于前端构建) + npm \ # Node.js 包管理器 + binutils \ # 二进制工具(用于 PyInstaller) + tar \ # 打包工具 + gzip \ # 压缩工具 + mysql-client \ # MySQL 客户端 + libmysqlclient-dev \ # MySQL 开发库 + gcc \ # C 编译器 + g++ \ # C++ 编译器 + libssl-dev \ # SSL 支持 + xdg-utils # 用于打开浏览器 + +# 验证安装 +echo "Verifying installations..." +python3.11 --version +node --version +npm --version \ No newline at end of file