启动新的Shell时,未配置PATH环境变量
正确地。目录anaconda3/bin
或miniconda3/bin
位于第二
仅位置,而不是PATH变量中的第一个位置。这可以是
由conda deactivate
解决,然后再次激活。
这个问题已经问过几次了(例如here和here)
但是现有的问题要么很老,要么专注于使用
source activate env-name
。总而言之,我没有找到能解决我问题的答案
问题。
启动新的Shell时,基本环境被激活。相关
我的.bashrc
中的摘要内容如下:
condaexe="/home/$USER/.miniconda3/bin/conda"
condash="/home/$USER/.miniconda3/etc/profile.d/conda.sh"
__conda_setup="$($condaexe 'shell.bash' 'hook' 2> /dev/null)"
# shellcheck disable=SC2181
if [[ $? -eq 0 ]]
then
eval "$__conda_setup"
elif [[ -f "$condash" ]]
then
source "$condash"
fi
unset __conda_setup condaexe condash
然后,PATH变量定义如下:
(base)$ echo $PATH
/home/user/.local/bin:/home/user/.miniconda3/bin:/home/user/.miniconda3/condabin:/home/user/workspace/my-project/:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
(base)$ conda deactivate && echo $PATH
/home/user/.local/bin:/home/user/.miniconda3/condabin:/home/user/workspace/my-project/:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ conda activate base && echo $PATH
/home/user/.miniconda3/bin:/home/user/.local/bin:/home/user/.miniconda3/condabin:/home/user/workspace/my-project/:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
(base)$
请注意,/home/user/.local/bin
被包含两次;一次又一次
在Miniconda3目录之后。
我尝试通过将以下代码段附加到.bashrc
来调试问题:
echo $CONDA_PROMPT_MODIFIER
echo $PATH
这产生
(base)
/home/user/.miniconda3/bin:/home/user/.miniconda3/condabin:/home/user/workspace/my-project:/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
完全可以,但是在某种程度上,在之后 .bashrc
进行了修改。
请注意,这里/home/user/.local/bin
仅包含一次。
这是怎么回事?如何设置Bash / Conda以获得正确定义的PATH 环境变量?
答案 0 :(得分:2)
我在原始问题中遗漏了三个要素,它们是解决方案的关键。
首先,我在TMux中运行所有shell。其次,TMux获取.profile
。第三,在.profile
中,某些本地目录(如前述的~/.local/bin
)被盲目地放在PATH之前。
总的来说,以上所有奇怪的行为都是有道理的。特别是,PATH在~/.bashrc
的末尾是正确的,但在shell中却不明显;在~/.profile
之间进行了修改。
有三种解决方案:
~/.profile
中PATH的操作似乎有些人无法将TMux配置为仅提供~/.bashrc
(reference 1,reference 2)的源代码,尽管这里也存在一些变通办法。
答案 1 :(得分:1)
这与Bash初始化文件有关。默认情况下,在{strong>交互式非登录外壳中使用~/.bashrc
。它不会在登录shell中提供。 Tmux默认使用登录外壳。因此,以tmux开始的shell会跳过~/.bashrc
。
default-command
shell命令默认值为空字符串,,它指示tmux使用
default-shell
选项的值来创建登录shell 。
Bash的初始化文件,
/etc/profile
~/.bash_profile
,~/.bash_login
,~/.profile
(仅存在的第一个)/etc/bash.bashrc
(某些Linux;不适用于Mac OS X)~/.bashrc
$BASH_ENV
中的源文件在其他情况下,奇怪的交互式非登录加载要求也会使人们感到困惑。 最佳解决方案是将~/.bashrc
的加载要求更改为仅交互式,这正是某些发行版(如Ubuntu)正在做的事情。
# write content below into ~/.profile, or ~/.bash_profile
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
这应该是您想要的解决方案。并且我建议每个Bash用户在配置文件中对此进行设置。
参考
man tmux