依赖安装脚本如何编?

wen 实用脚本 69

本文目录导读:

依赖安装脚本如何编?

  1. 针对 Linux (Debian/Ubuntu/RHEL/CentOS) 的 Shell 脚本
  2. 针对 macOS 的 Shell 脚本
  3. 针对 Node.js 项目 (自动处理 npm/yarn/pnpm)
  4. 针对 Python 项目 (自动创建 venv 并安装 requirements)
  5. 全能型一键安装脚本 (适合项目根目录)
  6. 脚本编写的最佳实践

检测当前环境 → 执行对应的包管理器命令 → 处理错误和权限

以下我会提供几种常见场景的脚本模板,包括 Linux (apt/yum)macOS (brew)跨平台通用脚本 (Node.js/Python)

针对 Linux (Debian/Ubuntu/RHEL/CentOS) 的 Shell 脚本

这个脚本会自动判断系统是 apt 系还是 yum 系,然后安装你指定的包。

示例脚本: install_deps.sh

#!/bin/bash
# 设置错误时退出
set -e
# 定义需要安装的包列表
APT_PACKAGES="git curl wget build-essential libssl-dev"
YUM_PACKAGES="git curl wget gcc gcc-c++ make openssl-devel"
echo "🔍 检测操作系统类型..."
# 检测包管理器
if command -v apt-get &> /dev/null; then
    echo "📦 检测到 apt (Debian/Ubuntu)"
    echo "更新包索引..."
    sudo apt-get update -y
    echo "安装依赖: $APT_PACKAGES"
    sudo apt-get install -y $APT_PACKAGES
elif command -v yum &> /dev/null; then
    echo "📦 检测到 yum (CentOS/RHEL 7)"
    echo "安装依赖: $YUM_PACKAGES"
    sudo yum install -y $YUM_PACKAGES
elif command -v dnf &> /dev/null; then
    echo "📦 检测到 dnf (Fedora/RHEL 8+)"
    echo "安装依赖: $YUM_PACKAGES"
    sudo dnf install -y $YUM_PACKAGES
else
    echo "❌ 错误: 未能识别的包管理器 (未找到 apt, yum 或 dnf)"
    exit 1
fi
echo "✅ 所有系统级依赖安装完成!"

针对 macOS 的 Shell 脚本

macOS 通常使用 brew (Homebrew),如果没装,脚本可以自动安装 brew

示例脚本: install_mac_deps.sh

#!/bin/bash
set -e
echo "🍎 检测 macOS 环境..."
# 检查是否安装了 Homebrew
if ! command -v brew &> /dev/null; then
    echo "⚠️ 未检测到 Homebrew,正在安装 Homebrew..."
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    # 根据你的 mac 架构(Intel/Apple Silicon)配置路径
    if [[ $(uname -m) == "arm64" ]]; then
        echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
        eval "$(/opt/homebrew/bin/brew shellenv)"
    fi
fi
echo "更新 Homebrew..."
brew update
echo "安装常用依赖..."
brew install git curl wget cmake
# 如果你需要安装 Python 或 Node 等
# brew install python3 node
echo "✅ macOS 依赖安装完成!"

针对 Node.js 项目 (自动处理 npm/yarn/pnpm)

这个脚本用于安装 Node 项目的 node_modules,它会根据项目锁文件自动选择最快的包管理器。

示例脚本: install_node_deps.sh

#!/bin/bash
set -e
echo "📦 开始安装 Node.js 项目依赖..."
# 检查 Node 是否安装
if ! command -v node &> /dev/null; then
    echo "❌ 错误: 未安装 Node.js,请先安装 Node.js"
    exit 1
fi
# 自动检测包管理器
if [ -f "pnpm-lock.yaml" ]; then
    echo "检测到 pnpm,使用 pnpm 安装..."
    if ! command -v pnpm &> /dev/null; then
        npm install -g pnpm
    fi
    pnpm install
elif [ -f "yarn.lock" ]; then
    echo "检测到 yarn,使用 yarn 安装..."
    if ! command -v yarn &> /dev/null; then
        npm install -g yarn
    fi
    yarn install
elif [ -f "package-lock.json" ]; then
    echo "检测到 npm,使用 npm 安装..."
    npm install
else
    echo "未检测到锁文件,默认使用 npm install..."
    npm install
fi
echo "✅ Node.js 依赖安装完成!"

针对 Python 项目 (自动创建 venv 并安装 requirements)

示例脚本: install_python_deps.sh

#!/bin/bash
set -e
echo "🐍 开始安装 Python 项目依赖..."
# 检查 Python 版本
PYTHON_CMD="python3"
if ! command -v python3 &> /dev/null; then
    if command -v python &> /dev/null; then
        PYTHON_CMD="python"
    else
        echo "❌ 错误: 未找到 Python"
        exit 1
    fi
fi
echo "使用: $($PYTHON_CMD --version)"
# 创建虚拟环境
if [ ! -d "venv" ]; then
    echo "创建虚拟环境..."
    $PYTHON_CMD -m venv venv
fi
# 激活虚拟环境并安装
source venv/bin/activate
echo "激活虚拟环境: $(which python)"
# 升级 pip
pip install --upgrade pip
# 安装依赖
if [ -f "requirements.txt" ]; then
    pip install -r requirements.txt
elif [ -f "Pipfile" ]; then
    # 如果是 Pipenv 项目
    pip install pipenv
    pipenv install
else
    echo "⚠️ 未找到 requirements.txt 或 Pipfile, 跳过安装"
fi
deactivate
echo "✅ Python 依赖安装完成!"

全能型一键安装脚本 (适合项目根目录)

这个脚本会尝试自动设置环境,并安装所有你知道的依赖(推荐放在项目根目录的 setup.sh 中)。

示例脚本: setup.sh

#!/bin/bash
set -e
echo "🚀 开始初始化项目环境..."
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$ROOT_DIR"
# 1. 安装系统级依赖 (调用上面的脚本)
echo "步骤 1/3: 安装系统依赖..."
bash install_deps.sh
# 2. 安装 Node 依赖 (如果有 package.json)
if [ -f "package.json" ]; then
    echo "步骤 2/3: 安装 Node.js 依赖..."
    bash install_node_deps.sh
fi
# 3. 安装 Python 依赖 (如果有 requirements.txt)
if [ -f "requirements.txt" ]; then
    echo "步骤 3/3: 安装 Python 依赖..."
    bash install_python_deps.sh
fi
echo "🎉 项目初始化完成!"

脚本编写的最佳实践

  1. set -e: 放在脚本开头,一旦某行命令出错立即退出,避免“带病安装”。

  2. set -x: (可加在调试时)打印每一条执行的命令,方便排查。

  3. 权限处理: 系统级安装(如 apt)通常需要 sudo,而 Node/Python 用户级安装通常不需要。

  4. 重试机制: 对于网络不稳定的环境,可以增加重试逻辑。

    function retry() {
        local n=1
        local max=3
        local delay=5
        while true; do
            "$@" && break || {
                if [[ $n -lt $max ]]; then
                    ((n++))
                    echo "⚠️ 命令失败,${delay}秒后重试 (${n}/${max})..."
                    sleep $delay
                else
                    echo "❌ 命令失败,已达最大重试次数"
                    return 1
                fi
            }
        done
    }
    # 使用方式
    retry sudo apt-get install -y git
  5. 环境检测: 总是先检测 command -v xxx 或文件是否存在,避免执行不存在的命令。

  6. 错误信息exit 1 退出前给出明确的错误提示。

你可以根据你的项目是 C++/Golang/Python/Node 还是 单纯的系统工具,从上面找一个最接近的模板改改即可。

抱歉,评论功能暂时关闭!