自动化环境搭建脚本:安装 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
thenecho "Conda not found, installing Miniconda..."# 下载并安装 MinicondaMINICONDA_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# 激活 Condasource $HOME/miniconda3/bin/activate# 删除安装脚本rm $MINICONDA_INSTALLERecho "Miniconda installation complete."
elseecho "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"; thenecho "Conda environment 'my_environment' already exists. Activating it..."conda activate my_environment
elseecho "Conda environment 'my_environment' not found. Creating it..."conda create -n my_environment python=3.10 -yconda 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" ]; thenecho "Installing Python dependencies from requirements.txt..."pip install -r requirements.txt
elseecho "requirements.txt not found!"
fi# 检查 Node.js 和 npm 是否安装,如果未安装则通过 Conda 安装【所有的机器都是不给sudo权限的】
if ! command -v node &> /dev/null
thenecho "Node.js not found, installing Node.js and npm using Conda..."# 使用 conda 安装 Node.js 和 npmconda install -c conda-forge nodejs -yecho "Node.js and npm installation complete via Conda."
elseecho "Node.js and npm are already installed."
fi# 前端安装
if [ -d "frontend" ]; thenecho "Entering the 'frontend' directory and installing Node.js dependencies..."cd frontendnpm installcd ..
elseecho "'frontend' directory not found!"
fiecho "Setup complete."
脚本实现原理与步骤
1. 检查并安装 Miniconda
Miniconda 是 Conda 的轻量级版本,适用于需要定制化安装 Python 环境的用户。它提供了最小的 Conda 安装包,允许用户灵活地安装和管理 Python 包和虚拟环境。
bash">if ! command -v conda &> /dev/null
thenecho "Conda not found, installing Miniconda..."# 下载并安装 MinicondaMINICONDA_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# 激活 Condasource $HOME/miniconda3/bin/activate# 删除安装脚本rm $MINICONDA_INSTALLERecho "Miniconda installation complete."
elseecho "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 安装脚本,确保系统能够自动获取并安装 Miniconda。
2. 创建并激活 Conda 虚拟环境
bash"># 初始化 Conda 环境(如果没有初始化过的话)
echo "Initializing Conda..."
source $HOME/miniconda3/etc/profile.d/conda.sh# 检查虚拟环境是否已存在
if conda env list | grep -q "patent_searchengine"; thenecho "Conda environment 'patent_searchengine' already exists. Activating it..."conda activate patent_searchengine
elseecho "Conda environment 'patent_searchengine' not found. Creating it..."conda create -n patent_searchengine python=3.10 -yconda 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
中的.config
或pip
目录不存在,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
之间换行,从而生成格式正确的配置文件:[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple
- 如果不使用
-e
,文本中的\n
会被当作普通字符输出,导致配置文件格式错误。
- 在脚本中,
4. 安装 Python 依赖
bash">if [ -f "requirements.txt" ]; thenecho "Installing Python dependencies from requirements.txt..."pip install -r requirements.txt
elseecho "requirements.txt not found!"
fi
脚本检查当前目录是否存在 requirements.txt
文件。如果存在,它将使用 pip
安装文件中列出的 Python 依赖。
5. 安装 Node.js 和 npm
bash">if ! command -v node &> /dev/null
thenecho "Node.js not found, installing Node.js and npm using Conda..."conda install -c conda-forge nodejs -yecho "Node.js and npm installation complete via Conda."
elseecho "Node.js and npm are already installed."
fi
由于在一些机器上可能没有 sudo
权限,我们通过 Conda 来安装 Node.js 和 npm。这样可以避免在没有管理员权限的情况下直接使用 apt
安装。
6. 安装前端依赖
bash">if [ -d "frontend" ]; thenecho "Entering the 'frontend' directory and installing Node.js dependencies..."cd frontendnpm installcd ..
elseecho "'frontend' directory not found!"
fi
最后,脚本检查是否存在名为 frontend
的目录。如果目录存在,进入该目录并运行 npm install
安装前端的依赖。如果目录不存在,脚本会输出提示信息。
总结
本文通过一个 Bash 脚本详细介绍了如何自动化环境搭建的过程,包括:
- 安装 Miniconda 并初始化 Conda 环境。
- 配置国内镜像源以加速包下载。
- 安装 Python 依赖及 Node.js 和 npm。
- 安装前端依赖。
通过这个自动化脚本,你不仅能够快速搭建 Python 开发环境,还能确保每次环境的搭建都一致并且高效。对于没有管理员权限的用户来说,这种方法尤其有用,因为它通过 Conda 安装依赖,避免了使用 sudo
的需要。
希望这篇文章对你有所帮助,提升了你的开发效率!