diff --git a/setup_centos.sh b/setup_centos.sh index e513dac..f615944 100644 --- a/setup_centos.sh +++ b/setup_centos.sh @@ -200,6 +200,22 @@ if [ ! -d "venv" ]; then echo "✅ 虚拟环境创建成功" else echo "✅ 虚拟环境已存在" + # 检查虚拟环境是否正常 + if [ -f "venv/bin/pip" ]; then + # 检查 pip 脚本是否有行尾符问题 + if file venv/bin/pip | grep -q "CRLF"; then + echo "⚠️ 检测到虚拟环境中的脚本有行尾符问题,正在修复..." + find venv/bin -type f -name "pip*" -exec sed -i 's/\r$//' {} \; + find venv/bin -type f -name "activate" -exec sed -i 's/\r$//' {} \; + find venv/bin -type f -name "python*" -exec sed -i 's/\r$//' {} \; + echo "✅ 行尾符已修复" + fi + else + echo "⚠️ 虚拟环境可能已损坏,正在重新创建..." + rm -rf venv + python3 -m venv venv + echo "✅ 虚拟环境重新创建成功" + fi fi # 4. 激活虚拟环境并安装 Python 包 @@ -207,16 +223,25 @@ echo "" echo "步骤 4: 安装 Python 依赖包..." source venv/bin/activate +# 验证 pip 是否可用 +if ! command -v pip >/dev/null 2>&1; then + echo "❌ 错误: pip 命令不可用,尝试修复虚拟环境..." + deactivate 2>/dev/null || true + rm -rf venv + python3 -m venv venv + source venv/bin/activate +fi + # 升级 pip -pip install --upgrade pip +python3 -m pip install --upgrade pip # 安装依赖 -pip install DrissionPage +python3 -m pip install DrissionPage # 可选:如果需要数据库功能 read -p "是否需要数据库功能?(sqlalchemy, pymysql) [y/N]: " need_db if [ "$need_db" = "y" ] || [ "$need_db" = "Y" ]; then - pip install sqlalchemy pymysql + python3 -m pip install sqlalchemy pymysql fi deactivate diff --git a/setup_ubuntu.sh b/setup_ubuntu.sh new file mode 100644 index 0000000..301a2f9 --- /dev/null +++ b/setup_ubuntu.sh @@ -0,0 +1,227 @@ +#!/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 ""