问题描述
在外部终端可以正常使用conda activate
激活虚拟环境,但是新建Tmux会话后,在Tmux会话内部无法正常使用。具体表现为在Tmux内使用conda activate [环境名称]
后,有如下报错:
user@server:~$ conda activate <env_name>
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run
$ conda init <SHELL_NAME>
Currently supported shells are:
- bash
- fish
- tcsh
- xonsh
- zsh
- powershell
See 'conda init --help' for more information and options.
IMPORTANT: You may need to close and restart your shell after running 'conda init'.
解决方案:
在Tmux会话窗口中输入如下命令:
source ~/.bashrc
之后就可以正常使用conda activate
激活环境了。
P.S. 请确保遇到的问题与下面的原因分析相同
原因分析:
该问题的场景是外部终端可以正常使用,但是Tmux会话内部却有异常。首先外部可以正常使用说明本身的配置是没问题的,更像是Tmux内部没有获取到相应的配置。具体到这个例子,分别在外部终端和Tmux终端中输入which conda
来查看conda的路径,结果如下:
Tmux:
user@server:~$ which conda
/home/user/anaconda3/condabin/conda
外部终端:
user@server:~$ which conda
/home/user/anaconda3/bin/conda
可以发现两者的路径是不一样的,而外部终端的可以正常使用。检查一下用于储存用户个性化配置的文件.bashrc
,找到conda配置的部分:
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/user/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/home/user/anaconda3/etc/profile.d/conda.sh" ]; then
. "/home/user/anaconda3/etc/profile.d/conda.sh"
else
export PATH="/home/user/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
存在上述代码说明conda确实是正确配置了,并且对应的路径是/home/user/anaconda3/bin/conda
,这说明是Tmux内部没有使用到该配置文件导致命令错误。既然如此,只需要在Tmux会话内部使用source ~/.bashrc
运行该配置文件即可。
除了本例中的conda activate
,只要遇到是外部终端正常运行,Tmux内部不能运行的,都有可能是用户个性化配置文件没运行导致的,理论上使用上述方法都能解决。