赞
踩
前面写了个博客《conda:解决多项目开发环境配置的神器!》简单介绍了 Conda 的安装和基本命令,在做开发时经常会使用 Conda 建立多个应用环境,Conda 的命令虽不复杂,但还是有时会弄混,所以就考虑写个脚本,一条指令创建环境。没啥难度,仅仅是方便自己使用而已。
该脚本是在 macOS 里写的,没有在 Windows 下测试。
1.2
走1.3
),否则就提示用户“改名或在命令行参数里设置覆盖选项(override)”脚本的功能点,基本都由对应的函数来实现。
注意:函数的返回值,可以在主函数调用此函数后,用$?获得(参考后面完整代码)
check_conda_installed(){
# 尝试执行conda命令
conda --version > /dev/null 2>&1
}
check_env_exists(){
conda env list | grep -q "^$env_name\s"
}
if [ "$override" = "override" ]; then # 是否覆盖
override_env
else
echo "环境 $env_name 已存在!解决方法:"
echo " 1. 请改名后再安装;"
echo " 2. 或者使用下面的命令覆盖安装:"
echo " source installenv.sh $env_name override"
fi
check_env_activated(){
if [[ -n "$CONDA_DEFAULT_ENV" ]]; then
if [[ "$CONDA_DEFAULT_ENV" = "$env_name" ]]; then
return 0 # 环境已激活
else
return 1 # 环境未激活
fi
else
return 1 # 环境未激活
fi
}
conda --version # 获取 Conda 版本,可以根据此命令的返回值判断 Conda 是否安装
conda env list # 列举 Conda 安装了哪些环境
conda create -n $env_name [python=$python_version] -y # 创建环境,此例指定要安装python及版本,可选
conda activate $env_name # 激活环境
conda deactivate # 将当前环境设置为非激活状态
conda remove --name $env_name --all -y # 删除环境
此脚是为了在开发时减少配置 Conda 开发环境的时间,并不是作为通用工具来开发的,所以脚本并没有考虑健壮性,最好只用来做测试,避免造成不可预见的损失。您可以根据需要在此脚本基础上进行完善。
下面是完整代码
#!/bin/bash
# 此脚本使用 Conda 安装环境
#用法:
# ./installenv.sh [env_name] [override]
# 上面的两个参数:
# env_name 为环境名,必须要有,且必须是第一个参数
# override 为是否覆盖,可选,默认为 "no",需要覆盖必须为 "override"字符串
env_name=$1 # 环境名
override=$2 # 是否覆盖
# 入口函数,用来安装环境
main() {
if [ -z "$env_name" ]; then
echo ""
echo "!!! 请输入变量名"
echo "用法: "
echo "source installenv.sh [env_name] [override]"
echo "# env_name 为环境名,必须要有,且必须是第一个参数"
echo "# override 为是否覆盖,可选,默认为 \"no\",需要覆盖必须为 \"override\"字符串"
echo ""
return 1
fi
if [ -z "$override" ]; then
override="no"
fi
check_conda_installed # 检查 Conda 是否安装
if [ $? -ne 0 ]; then # Conda 未安装
echo "没有安装 Conda,请安装!"
return 1
fi
check_env_exists # 检查环境是否存在
if [ $? -ne 0 ]; then # 指定的环境不存在
conda create -n $env_name python=3.9.12 -y # 创建环境
conda activate $env_name # 激活环境
return 0
fi
if [ "$override" = "override" ]; then # 是否覆盖
override_env
else
echo "环境 $env_name 已存在!解决方法:"
echo " 1. 请改名后再安装;"
echo " 2. 或者使用下面的命令覆盖安装:"
echo " source installenv.sh $env_name override"
fi
}
# 检查conda是否安装
# 返回值为0表示conda已安装,否则为1
check_conda_installed(){
# 尝试执行conda命令
conda --version > /dev/null 2>&1
}
# 检查环境是否存在
# 返回值:0 存在,1 不存在
check_env_exists(){
conda env list | grep -q "^$env_name\s"
}
# 覆盖环境
override_env(){
check_env_activated
if [ $? -eq 0 ]; then # 环境已激活
conda deactivate
fi
conda remove --name $env_name --all -y # 删除环境
conda create -n $env_name python=3.9.12 -y # 创建环境
conda activate $env_name # 激活环境
}
# 检查环境是否激活
# 返回值为0表示激活,为1表示未激活
check_env_activated(){
if [[ -n "$CONDA_DEFAULT_ENV" ]]; then
if [[ "$CONDA_DEFAULT_ENV" = "$env_name" ]]; then
return 0 # 环境已激活
else
return 1 # 环境未激活
fi
else
return 1 # 环境未激活
fi
}
# 安装指定环境
main # 安装指定环境
在执行此脚本时,需要在Shell(终端)里以source(或者 .)的方式来运行,否则会出错,具体原因看下面“通义灵码
”的解释
在 Shell 脚本中直接使用 conda 命令有时可能无法访问到 Conda 的环境变量和命令,这是因为 Conda 通过修改shell的环境变量(特别是 PATH 变量)来切换不同的环境。当你在一个新的 Shell 会话中直接运行 conda 命令时,如果该 Shell 会话没有经过 Conda 的初始化,就可能找不到 Conda 命令。
看得有点晕吧?没关系,说人话:当你需要在脚本中执行 conda 命令以管理环境或安装软件包时,一种常见的做法是通过 source 命令(在Bash中也可以写作.)来执行 conda 的初始化脚本,确保conda的环境变量设置正确。再直观一点,只要按下面的写法执行就没问题了:
source ./installenv.sh [env_name] [override]
最近编码一直使用“通义灵码
”,那个代码联想功能简直就是逆天了,基本上你想到的没想到的代码他都给你联想了,这样写代码效率简直爆棚,语法错误和 bug,也非常少了。
我让她简单给我分析一下代码,她说了下面的话,由于太佩服了,所以就作为题外话,截个图分享出来:
看了上面通义灵码
的代码分析,你能忍住不安装一个 AI编码助手
插件吗?这种插件很多,可以根据需要选择,建议还是试试吧!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。