0%

在zsh中的conda环境

在manjaro的使用过程中,因为要经常用到python,所以安装了anaconda用于管理python环境。最开始为了图方便,于是直接在zsh打开时将$(anaconda path)/bin 放在环境变量path中,并且在最前面。但是这样的做法迎来了许多的麻烦。在需要在zsh中对一些源代码进行编译时,经常会出现系统首先检测到anaconda内部的c运行库,这些c运行库由于版本或是依赖问题,导致编译时常常报错。由于最开始很少会遇到这种问题,于是仅仅是临时修改了~/.zshrc 文件,但是后来越来越多的遇到这类问题,常常make出错,也很难定位问题,最终才发现是编译过程中使用了anaconda的c运行库出的问题,于是决定不再每次启动zsh时都导入conda环境。

在~/.zshrc 文件中,将相关的把conda路径加入path的语句删除,新建立以下函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
condainit(){
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/opt/anaconda3/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
. "/opt/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/opt/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
}

这样当需要在zsh中使用conda环境时,执行condainit就可以导入conda环境。如果需要删除conda环境,即将其从path中删除,由于要删除path中的路径较为麻烦,建议重启zsh,不执行condainit时就不会导入conda环境。