我来帮你写一个自动安装依赖包的脚本,以下提供几种常见场景的脚本:

Python 项目依赖安装脚本
#!/bin/bash
# install_python_deps.sh
# 设置错误时退出
set -e
echo "====== Python 依赖安装脚本 ======"
# 检查 Python 是否安装
if ! command -v python3 &> /dev/null; then
echo "错误: 未找到 Python3"
exit 1
fi
# 检查 pip 是否安装
if ! command -v pip3 &> /dev/null; then
echo "安装 pip..."
python3 -m ensurepip --upgrade
fi
# 检查虚拟环境
if [ ! -d "venv" ]; then
echo "创建虚拟环境..."
python3 -m venv venv
fi
# 激活虚拟环境
source venv/bin/activate
# 升级 pip
echo "升级 pip..."
pip install --upgrade pip
# 安装依赖
if [ -f "requirements.txt" ]; then
echo "从 requirements.txt 安装依赖..."
pip install -r requirements.txt
else
echo "未找到 requirements.txt,安装默认包..."
pip install numpy pandas requests flask
fi
# 安装开发依赖(可选)
if [ -f "requirements-dev.txt" ]; then
echo "安装开发依赖..."
pip install -r requirements-dev.txt
fi
echo "====== 依赖安装完成 ======"
Node.js (npm) 项目依赖安装脚本
#!/bin/bash
# install_node_deps.sh
set -e
echo "====== Node.js 依赖安装脚本 ======"
# 检查 Node.js 是否安装
if ! command -v node &> /dev/null; then
echo "错误: 未找到 Node.js"
exit 1
fi
# 检查 npm 是否安装
if ! command -v npm &> /dev/null; then
echo "错误: 未找到 npm"
exit 1
fi
# 显示版本信息
echo "Node.js 版本: $(node --version)"
echo "npm 版本: $(npm --version)"
# 检查 package.json 是否存在
if [ ! -f "package.json" ]; then
echo "初始化 npm 项目..."
npm init -y
fi
# 安装依赖
echo "安装生产依赖..."
npm install --production
# 安装开发依赖(如果需要)
if [ -f "package.json" ]; then
echo "安装开发依赖..."
npm install --dev
fi
# 清理 npm 缓存(可选)
# npm cache clean --force
echo "====== 依赖安装完成 ======"
通用依赖安装脚本(支持多语言)
#!/bin/bash
# auto_install_deps.sh
set -e
# 检测项目类型
detect_project_type() {
if [ -f "requirements.txt" ] || [ -f "pyproject.toml" ]; then
echo "python"
elif [ -f "package.json" ]; then
echo "node"
elif [ -f "Gemfile" ]; then
echo "ruby"
elif [ -f "composer.json" ]; then
echo "php"
elif [ -f "go.mod" ]; then
echo "go"
else
echo "unknown"
fi
}
# 安装 Python 依赖
install_python() {
echo "检测到 Python 项目..."
if [ ! -d "venv" ]; then
python3 -m venv venv
fi
source venv/bin/activate
pip install --upgrade pip
if [ -f "requirements.txt" ]; then
pip install -r requirements.txt
fi
if [ -f "pyproject.toml" ]; then
pip install -e .
fi
}
# 安装 Node.js 依赖
install_node() {
echo "检测到 Node.js 项目..."
npm install
if [ -f "yarn.lock" ]; then
yarn install
elif [ -f "pnpm-lock.yaml" ]; then
pnpm install
fi
}
# 安装 Ruby 依赖
install_ruby() {
echo "检测到 Ruby 项目..."
bundle install
}
# 安装 PHP 依赖
install_php() {
echo "检测到 PHP 项目..."
composer install
}
# 安装 Go 依赖
install_go() {
echo "检测到 Go 项目..."
go mod download
go mod tidy
}
# 主函数
main() {
echo "====== 自动依赖安装工具 ======"
# 检查操作系统
OS=$(uname -s)
echo "操作系统: $OS"
# 检测项目类型
PROJECT_TYPE=$(detect_project_type)
echo "项目类型: $PROJECT_TYPE"
# 根据项目类型安装依赖
case $PROJECT_TYPE in
python)
install_python
;;
node)
install_node
;;
ruby)
install_ruby
;;
php)
install_php
;;
go)
install_go
;;
*)
echo "无法识别的项目类型"
exit 1
;;
esac
echo "====== 依赖安装完成 ======"
}
# 执行主函数
main
带参数的高级版本
#!/bin/bash
# advanced_install.sh
set -e
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 帮助信息
show_help() {
echo "用法: ./install.sh [选项]"
echo "选项:"
echo " -h, --help 显示帮助信息"
echo " -p, --python 安装 Python 依赖"
echo " -n, --node 安装 Node.js 依赖"
echo " -a, --all 安装所有依赖"
echo " -d, --dev 安装开发依赖"
}
# 检查环境
check_environment() {
if [ ! -f "package.json" ] && [ ! -f "requirements.txt" ]; then
log_error "未找到 package.json 或 requirements.txt"
exit 1
fi
}
# 安装 Python 依赖
install_python_deps() {
log_info "安装 Python 依赖..."
# 创建虚拟环境
if [ ! -d "venv" ]; then
python3 -m venv venv
log_info "虚拟环境已创建"
fi
# 激活虚拟环境
source venv/bin/activate
# 安装依赖
if [ -f "requirements.txt" ]; then
pip install -r requirements.txt
if [ "$DEV_MODE" = true ] && [ -f "requirements-dev.txt" ]; then
pip install -r requirements-dev.txt
fi
fi
log_info "Python 依赖安装完成"
}
# 安装 Node.js 依赖
install_node_deps() {
log_info "安装 Node.js 依赖..."
# 安装依赖
npm install
# 开发模式
if [ "$DEV_MODE" = true ]; then
npm install --dev
fi
log_info "Node.js 依赖安装完成"
}
# 主执行流程
main() {
DEV_MODE=false
INSTALL_PYTHON=false
INSTALL_NODE=false
# 解析参数
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_help
exit 0
;;
-p|--python)
INSTALL_PYTHON=true
shift
;;
-n|--node)
INSTALL_NODE=true
shift
;;
-a|--all)
INSTALL_PYTHON=true
INSTALL_NODE=true
shift
;;
-d|--dev)
DEV_MODE=true
shift
;;
*)
log_error "未知选项: $1"
show_help
exit 1
;;
esac
done
# 检查环境
check_environment
# 安装依赖
if [ "$INSTALL_PYTHON" = true ] && [ -f "requirements.txt" ]; then
install_python_deps
fi
if [ "$INSTALL_NODE" = true ] && [ -f "package.json" ]; then
install_node_deps
fi
# 如果没有指定安装类型,自动检测
if [ "$INSTALL_PYTHON" = false ] && [ "$INSTALL_NODE" = false ]; then
log_warn "未指定安装类型,自动检测..."
if [ -f "requirements.txt" ]; then
install_python_deps
fi
if [ -f "package.json" ]; then
install_node_deps
fi
fi
log_info "所有依赖安装完成!"
}
# 执行主函数
main "$@"
使用说明
-
创建脚本文件:
# 创建脚本 touch install_deps.sh # 编辑脚本(将上述代码复制进去) # 赋予执行权限 chmod +x install_deps.sh
-
执行脚本:
# 基本用法 ./install_deps.sh
带参数
./install_deps.sh -a -d # 安装所有依赖,包括开发依赖
3. **示例使用场景**:
```bash
# Python 项目
pip freeze > requirements.txt # 生成依赖文件
./install_deps.sh # 自动安装
# Node.js 项目
npm init -y # 初始化
./install_deps.sh # 自动安装
这些脚本会根据项目的配置文件自动检测并安装所需的依赖包,可以满足大多数项目的需求,根据需要选择或修改适合你的脚本。