自动化环境搭建脚本:安装 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
中的.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
之间换行,从而生成格式正确的配置文件: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
的需要。
希望这篇文章对你有所帮助,提升了你的开发效率!