Files
Jarvis_java/setup_ubuntu.sh
2025-12-14 14:45:41 +08:00

228 lines
6.0 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Ubuntu 环境快速设置脚本
set -e # 遇到错误立即退出
# 确保使用 bash 运行(兼容性问题处理)
if [ -z "$BASH_VERSION" ]; then
echo "警告: 此脚本需要使用 bash 运行"
echo "请使用: bash $0"
exit 1
fi
echo "=========================================="
echo "京东物流提取工具 - Ubuntu 环境设置"
echo "=========================================="
echo ""
# 1. 检查并安装系统依赖
echo "步骤 1: 检查系统依赖..."
if ! command -v python3 >/dev/null 2>&1; then
echo "安装 Python3..."
sudo apt update
sudo apt install -y python3 python3-pip python3-venv
else
echo "✅ Python3 已安装"
fi
# 检查 Chrome/Chromium
CHROME_PATH=""
if command -v google-chrome >/dev/null 2>&1; then
CHROME_PATH=$(which google-chrome)
echo "✅ 找到 Google Chrome: $CHROME_PATH"
elif [ -f "/usr/bin/google-chrome" ]; then
CHROME_PATH="/usr/bin/google-chrome"
echo "✅ 找到 Google Chrome: $CHROME_PATH"
elif command -v chromium-browser >/dev/null 2>&1; then
CHROME_PATH=$(which chromium-browser)
echo "✅ 找到 Chromium: $CHROME_PATH"
elif [ -f "/usr/bin/chromium-browser" ]; then
CHROME_PATH="/usr/bin/chromium-browser"
echo "✅ 找到 Chromium: $CHROME_PATH"
else
echo "⚠️ 未找到 Chrome/Chromium将尝试安装..."
echo "选择要安装的浏览器:"
echo "1) Google Chrome (推荐)"
echo "2) Chromium (开源版本)"
read -p "请选择 [1-2]: " choice
if [ "$choice" = "1" ]; then
echo "正在安装 Google Chrome..."
wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install -y ./google-chrome-stable_current_amd64.deb
rm -f google-chrome-stable_current_amd64.deb
CHROME_PATH="/usr/bin/google-chrome"
elif [ "$choice" = "2" ]; then
echo "正在安装 Chromium..."
sudo apt update
sudo apt install -y chromium-browser
CHROME_PATH="/usr/bin/chromium-browser"
fi
fi
# 2. 安装 Chrome 运行时依赖
echo ""
echo "步骤 2: 检查 Chrome 运行时依赖..."
DEPS="libnss3 libatk-bridge2.0-0 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1 libasound2"
MISSING_DEPS=""
for dep in $DEPS; do
if ! dpkg -l 2>/dev/null | grep -q "^ii.*$dep"; then
if [ -z "$MISSING_DEPS" ]; then
MISSING_DEPS="$dep"
else
MISSING_DEPS="$MISSING_DEPS $dep"
fi
fi
done
if [ -n "$MISSING_DEPS" ]; then
echo "安装缺失的依赖: $MISSING_DEPS"
sudo apt install -y $MISSING_DEPS
else
echo "✅ 所有依赖已安装"
fi
# 3. 创建虚拟环境
echo ""
echo "步骤 3: 设置 Python 虚拟环境..."
if [ ! -d "venv" ]; then
echo "创建虚拟环境..."
python3 -m venv venv
echo "✅ 虚拟环境创建成功"
else
echo "✅ 虚拟环境已存在"
# 检查虚拟环境是否正常
if [ ! -f "venv/bin/pip" ]; then
echo "⚠️ 虚拟环境可能已损坏,正在重新创建..."
rm -rf venv
python3 -m venv venv
echo "✅ 虚拟环境重新创建成功"
fi
fi
# 4. 激活虚拟环境并安装 Python 包
echo ""
echo "步骤 4: 安装 Python 依赖包..."
# 检查并修复 activate 脚本的行尾符问题
if [ -f "venv/bin/activate" ]; then
# 修复可能的行尾符问题
sed -i 's/\r$//' venv/bin/activate 2>/dev/null || true
fi
# 激活虚拟环境
source venv/bin/activate
# 验证虚拟环境是否正常激活
if [ -z "$VIRTUAL_ENV" ]; then
echo "❌ 错误: 虚拟环境激活失败,尝试重新创建..."
deactivate 2>/dev/null || true
rm -rf venv
python3 -m venv venv
source venv/bin/activate
fi
# 升级 pip使用 python3 -m pip 避免行尾符问题)
echo "升级 pip..."
python3 -m pip install --upgrade pip
# 安装依赖
echo "安装 DrissionPage..."
python3 -m pip install DrissionPage
# 可选:如果需要数据库功能
read -p "是否需要数据库功能?(sqlalchemy, pymysql) [y/N]: " need_db
if [ "$need_db" = "y" ] || [ "$need_db" = "Y" ]; then
echo "安装数据库相关包..."
python3 -m pip install sqlalchemy pymysql
fi
deactivate
# 5. 创建运行脚本
echo ""
echo "步骤 5: 创建便捷运行脚本..."
cat > run_logistics.sh << 'EOF'
#!/bin/bash
# 激活虚拟环境并运行物流提取脚本
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR"
# 检查虚拟环境是否存在
if [ ! -d "venv" ]; then
echo "❌ 错误: 虚拟环境不存在,请先运行 setup_ubuntu.sh"
exit 1
fi
# 修复可能的行尾符问题
if [ -f "venv/bin/activate" ]; then
sed -i 's/\r$//' venv/bin/activate 2>/dev/null || true
fi
# 激活虚拟环境
source venv/bin/activate
# 验证虚拟环境是否激活成功
if [ -z "$VIRTUAL_ENV" ]; then
echo "❌ 错误: 虚拟环境激活失败"
exit 1
fi
# 使用虚拟环境中的 Python3
PYTHON_CMD="$VIRTUAL_ENV/bin/python3"
if [ ! -f "$PYTHON_CMD" ]; then
PYTHON_CMD="python3"
fi
# 检查脚本文件是否存在
SCRIPT_FILE="jd/fetch_logistics_ubuntu.py"
if [ ! -f "$SCRIPT_FILE" ]; then
echo "❌ 错误: 找不到脚本文件 $SCRIPT_FILE"
echo "当前目录: $(pwd)"
echo "请确保脚本文件存在"
deactivate
exit 1
fi
# 运行脚本
echo "使用 Python: $PYTHON_CMD"
echo "运行脚本: $SCRIPT_FILE"
echo "参数: $@"
echo ""
$PYTHON_CMD "$SCRIPT_FILE" "$@"
# 保存退出码
EXIT_CODE=$?
# 退出虚拟环境
deactivate
# 返回脚本的退出码
exit $EXIT_CODE
EOF
chmod +x run_logistics.sh
# 6. 完成
echo ""
echo "=========================================="
echo "✅ 环境设置完成!"
echo "=========================================="
echo ""
echo "快速开始:"
echo " 方式1: 使用便捷脚本"
echo " ./run_logistics.sh"
echo ""
echo " 方式2: 手动运行"
echo " source venv/bin/activate"
echo " python jd/fetch_logistics_ubuntu.py"
echo " deactivate"
echo ""
echo "浏览器路径: $CHROME_PATH"
echo "虚拟环境: $(pwd)/venv"
echo ""