提升开发效率:Bash 脚本自动化环境搭建与依赖安装

自动化环境搭建脚本:安装 Miniconda、创建虚拟环境并配置前端依赖

在开发工作中,搭建开发环境往往是一个繁琐且重复的过程,尤其是在多次迁移或协作开发时。为了提高效率并避免每次手动配置环境,自动化的脚本能够极大地简化环境搭建流程。本文将详细介绍如何通过一个 Bash 脚本来自动化安装 Miniconda、创建 Python 虚拟环境、配置国内的 pip 镜像源以及安装前端依赖。

脚本概览

下面是完整的 Bash 脚本,它实现了以下功能:

  • 检查是否已安装 Conda,若未安装则自动安装 Miniconda。
  • 初始化 Conda 环境并创建一个新的虚拟环境(可以根据需要自定义环境名称)。
  • 修改 pip 镜像源为国内镜像(如清华镜像)以加速包下载。
  • 安装 Python 依赖(通过 requirements.txt 文件)。
  • 检查并通过 Conda 安装 Node.js 和 npm。
  • 安装前端的 Node.js 依赖。

脚本内容

bash 复制代码
#!/bin/bash

# 检查是否已安装conda
if ! command -v conda &> /dev/null
then
    echo "Conda not found, installing Miniconda..."

    # 下载并安装 Miniconda
    MINICONDA_INSTALLER="Miniconda3-latest-Linux-x86_64.sh"
    
    # 下载 Miniconda 安装脚本
    wget https://repo.anaconda.com/miniconda/$MINICONDA_INSTALLER

    # 运行安装脚本
    bash $MINICONDA_INSTALLER -b -p $HOME/miniconda3

    # 初始化 Conda
    $HOME/miniconda3/bin/conda init

    # 激活 Conda
    source $HOME/miniconda3/bin/activate

    # 删除安装脚本
    rm $MINICONDA_INSTALLER

    echo "Miniconda installation complete."
else
    echo "Conda is already installed."
fi

# 初始化 Conda 环境(如果没有初始化过的话)
echo "Initializing Conda..."
source $HOME/miniconda3/etc/profile.d/conda.sh

# 检查虚拟环境是否已存在
if conda env list | grep -q "my_environment"; then
    echo "Conda environment 'my_environment' already exists. Activating it..."
    conda activate my_environment
else
    echo "Conda environment 'my_environment' not found. Creating it..."
    conda create -n my_environment python=3.10 -y
    conda activate my_environment
fi

# 输出环境信息
echo "Conda environment 'my_environment' is activated."

# 永久修改 pip 镜像源为清华源
echo "Modifying pip source to Tsinghua mirror..."
mkdir -p ~/.config/pip
echo -e "[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple" > ~/.config/pip/pip.conf

# 安装 Python 依赖
if [ -f "requirements.txt" ]; then
    echo "Installing Python dependencies from requirements.txt..."
    pip install -r requirements.txt
else
    echo "requirements.txt not found!"
fi

# 检查 Node.js 和 npm 是否安装,如果未安装则通过 Conda 安装【所有的机器都是不给sudo权限的】
if ! command -v node &> /dev/null
then
    echo "Node.js not found, installing Node.js and npm using Conda..."

    # 使用 conda 安装 Node.js 和 npm
    conda install -c conda-forge nodejs -y

    echo "Node.js and npm installation complete via Conda."
else
    echo "Node.js and npm are already installed."
fi

# 前端安装
if [ -d "frontend" ]; then
    echo "Entering the 'frontend' directory and installing Node.js dependencies..."
    cd frontend
    npm install
    cd ..
else
    echo "'frontend' directory not found!"
fi

echo "Setup complete."

脚本实现原理与步骤

1. 检查并安装 Miniconda

Miniconda 是 Conda 的轻量级版本,适用于需要定制化安装 Python 环境的用户。它提供了最小的 Conda 安装包,允许用户灵活地安装和管理 Python 包和虚拟环境。

bash 复制代码
if ! command -v conda &> /dev/null
then
    echo "Conda not found, installing Miniconda..."

    # 下载并安装 Miniconda
    MINICONDA_INSTALLER="Miniconda3-latest-Linux-x86_64.sh"
    
    # 下载 Miniconda 安装脚本
    wget https://repo.anaconda.com/miniconda/$MINICONDA_INSTALLER

    # 运行安装脚本
    bash $MINICONDA_INSTALLER -b -p $HOME/miniconda3

    # 初始化 Conda
    $HOME/miniconda3/bin/conda init

    # 激活 Conda
    source $HOME/miniconda3/bin/activate

    # 删除安装脚本
    rm $MINICONDA_INSTALLER
    echo "Miniconda installation complete."
else
    echo "Conda is already installed."
fi

首先检查 Conda 是否已安装。如果未安装,则下载并安装 Miniconda,并运行初始化命令。激活 Conda 后,删除安装脚本以保持清洁。

①. if ! command -v conda &> /dev/null

这一行用于检查系统中是否已经安装了 conda 命令。

  • command -v conda:

    • command 是一个用来执行并检查命令的 Bash 内建命令。
    • -v 选项会检查指定的命令(在这个例子中是 conda)是否存在,并返回该命令的路径(如果存在的话)。如果 conda 被安装并且能在系统路径中找到,command -v conda 会输出 conda 命令的路径。例如,输出可能是 /usr/bin/conda
    • 如果 conda 没有安装,command -v conda 将不会输出任何内容。
  • !:

    • 这是一个逻辑"非"操作符。它用于反转 command -v conda 命令的退出状态。如果 conda 安装了,command -v conda 会成功返回一个路径,退出状态为 0(表示成功),! 会将其反转为 false,条件不成立。
    • 如果 conda 没有安装,command -v conda 将失败,退出状态为 1,! 会反转为 true,从而进入 if 块执行后续操作。
  • &> /dev/null:

    • 这一部分用于将 command -v conda 命令的输出(包括标准输出和标准错误输出)丢弃。&> 是 Bash 的语法,用于将输出重定向到一个文件,/dev/null 是一个特殊的设备文件,任何写入它的数据都会被丢弃。这样做的目的是避免在终端上输出 conda 命令的路径或错误信息,只关注命令的退出状态。

总结 :这一行的逻辑是检查系统中是否已经安装了 conda,如果没有安装,接下来的代码会自动执行 Miniconda 的安装过程。如果已经安装 conda,则跳过安装步骤。

②. wget 下载脚本

bash 复制代码
wget https://repo.anaconda.com/miniconda/$MINICONDA_INSTALLER
  • wget :
    • wget 是一个常用的命令行工具,用于从网络上下载文件。在这里,它被用来从 Miniconda 的官方仓库下载安装脚本。
    • https://repo.anaconda.com/miniconda/$MINICONDA_INSTALLER 是下载链接。$MINICONDA_INSTALLER 是一个变量,包含了 Miniconda 安装脚本的文件名。这个变量被设置为 Miniconda3-latest-Linux-x86_64.sh,这是适用于 64 位 Linux 系统的最新 Miniconda 安装脚本。
    • 通过 wget 命令,脚本将被下载到当前目录。

总结 :这行代码通过 wget 从网络上下载 Miniconda 安装脚本,确保系统能够自动获取并安装 Miniconda。

2. 创建并激活 Conda 虚拟环境

bash 复制代码
# 初始化 Conda 环境(如果没有初始化过的话)
echo "Initializing Conda..."
source $HOME/miniconda3/etc/profile.d/conda.sh

# 检查虚拟环境是否已存在
if conda env list | grep -q "patent_searchengine"; then
    echo "Conda environment 'patent_searchengine' already exists. Activating it..."
    conda activate patent_searchengine
else
    echo "Conda environment 'patent_searchengine' not found. Creating it..."
    conda create -n patent_searchengine python=3.10 -y
    conda activate patent_searchengine
fi

脚本通过 conda env list 检查名为 my_environment 的虚拟环境是否已存在。如果已存在,则激活该环境;如果不存在,则创建一个新的 Conda 环境并激活它。

3. 永久修改 pip 镜像源

为了提高包下载速度,我们将 pip 的镜像源修改为国内清华镜像源:

bash 复制代码
# 永久修改 pip 镜像源为清华源

echo "Modifying pip source to Tsinghua mirror..."
mkdir -p ~/.config/pip
echo -e "[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple" > ~/.config/pip/pip.conf

此步骤通过修改 ~/.config/pip/pip.conf 配置文件,将 pip 的镜像源设置为清华大学的镜像源,从而加速包下载。

①. 创建 pip 配置文件的目录

bash 复制代码
mkdir -p ~/.config/pip
  • mkdir 是用于创建目录的命令。
  • -p 参数 :表示递归创建目录。如果父目录不存在,-p 会确保所有上级目录也被一并创建。
    • 例如:如果路径 ~/.config/pip 中的 .configpip 目录不存在,mkdir -p 会自动依次创建这些目录,而不会报错。

这样做的好处是,即使路径不存在,也不会中断操作流程。

②. 创建或覆盖 pip.conf 配置文件

bash 复制代码
echo -e "[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple" > ~/.config/pip/pip.conf
  • echo 命令 :用于输出文本。在这里,echo 将生成的文本内容写入到配置文件中。
  • -e 参数 :表示启用转义字符解析,使得特殊字符(如 \n 换行符)被正确解释。
    • 在脚本中,\n 用于在 [global]index-url 之间换行,从而生成格式正确的配置文件:

      plaintext 复制代码
      [global]
      index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    • 如果不使用 -e,文本中的 \n 会被当作普通字符输出,导致配置文件格式错误。

4. 安装 Python 依赖

bash 复制代码
if [ -f "requirements.txt" ]; then
    echo "Installing Python dependencies from requirements.txt..."
    pip install -r requirements.txt
else
    echo "requirements.txt not found!"
fi

脚本检查当前目录是否存在 requirements.txt 文件。如果存在,它将使用 pip 安装文件中列出的 Python 依赖。

5. 安装 Node.js 和 npm

bash 复制代码
if ! command -v node &> /dev/null
then
    echo "Node.js not found, installing Node.js and npm using Conda..."
    conda install -c conda-forge nodejs -y
    echo "Node.js and npm installation complete via Conda."
else
    echo "Node.js and npm are already installed."
fi

由于在一些机器上可能没有 sudo 权限,我们通过 Conda 来安装 Node.js 和 npm。这样可以避免在没有管理员权限的情况下直接使用 apt 安装。

6. 安装前端依赖

bash 复制代码
if [ -d "frontend" ]; then
    echo "Entering the 'frontend' directory and installing Node.js dependencies..."
    cd frontend
    npm install
    cd ..
else
    echo "'frontend' directory not found!"
fi

最后,脚本检查是否存在名为 frontend 的目录。如果目录存在,进入该目录并运行 npm install 安装前端的依赖。如果目录不存在,脚本会输出提示信息。

总结

本文通过一个 Bash 脚本详细介绍了如何自动化环境搭建的过程,包括:

  • 安装 Miniconda 并初始化 Conda 环境。
  • 配置国内镜像源以加速包下载。
  • 安装 Python 依赖及 Node.js 和 npm。
  • 安装前端依赖。

通过这个自动化脚本,你不仅能够快速搭建 Python 开发环境,还能确保每次环境的搭建都一致并且高效。对于没有管理员权限的用户来说,这种方法尤其有用,因为它通过 Conda 安装依赖,避免了使用 sudo 的需要。

希望这篇文章对你有所帮助,提升了你的开发效率!

相关推荐
明神特烦恼13 分钟前
2.用户登录流程
java·开发语言·spring boot
weixin_3077791313 分钟前
数据库Block Nested Loop Join的原理及C++和Boost库实现
开发语言·数据库·c++
Alasdair_lu16 分钟前
WPF 字符串传值到后端
开发语言·wpf
阿政一号29 分钟前
Linux初识:【版本控制器Git】【调试器gdb/cgdb使用】
linux·运维·服务器·git·版本控制器·gdb/cgdb
打工人你好33 分钟前
Linux 时间操作详解
linux·服务器
网硕互联的小客服42 分钟前
磁盘阵列服务器和普通服务器的区别
linux·运维·服务器·windows·键盘
玥轩_5211 小时前
《Linux服务与安全管理》| 邮件服务器安装和配置
linux·服务器·网络·数据库·网络安全·redhat·邮件服务器
m0_548514771 小时前
Centos7搭建PHP项目,环境(Apache+PHP7.4+Mysql5.7)
开发语言·php·apache
爱辉弟啦1 小时前
Yum 安装程序报错Error: rpmdb open failesd
linux·运维
小白也有IT梦1 小时前
Ubuntu 完整卸载 WPS Office (deb包安装版)
linux·ubuntu·wps