Conda 在激活环境时不设置路径
Conda does not set paths when activating environment
启动新的shell时,没有配置PATH环境变量
适当地。目录 anaconda3/bin
或 miniconda3/bin
在第二个
仅位置,而不是 PATH 变量中的第一个位置。这可以是
由 conda deactivate
解决并再次激活它。
这个问题已经被问过好几次了(例如here and 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 以获得正确定义的路径
环境变量?
我在原始问题中遗漏了三个关键的解决方案。
首先,我 运行 我所有的 shell 都在 TMux 中。其次,TMux 来源 .profile
。第三,在 .profile
中,一些本地目录(如上述 ~/.local/bin
被盲目地添加到 PATH 中。
综上所述,上述所有奇怪的行为都是有道理的。特别是 PATH 在 ~/.bashrc
末尾正确但在 shell 中不正确现在很明显; ~/.profile
.
对其进行了修改
解决这个问题的三种方法:
- 手动停用和激活 conda(临时解决方法)
- 更挑剔哪些 shells 在 TMux 中启动(非常不方便)
- 注释掉
~/.profile
中对 PATH 的操作
似乎无法将 TMux 配置为仅来源 ~/.bashrc
(reference 1, ),尽管这里也存在一些解决方法。
这与 Bash 初始化文件有关。默认情况下,~/.bashrc
用于 交互式非登录 shell。它不会来自登录 shell。 Tmux 默认使用 login shell。因此,shells 由 tmux skip ~/.bashrc
.
启动
default-command
shell-command
The default is an empty string, which instructs tmux to create a login shell using the value of the default-shell
option.
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 用户在个人资料中设置此设置。
参考资料
- Unix Shell Initialization
man tmux
启动新的shell时,没有配置PATH环境变量
适当地。目录 anaconda3/bin
或 miniconda3/bin
在第二个
仅位置,而不是 PATH 变量中的第一个位置。这可以是
由 conda deactivate
解决并再次激活它。
这个问题已经被问过好几次了(例如here and 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 以获得正确定义的路径 环境变量?
我在原始问题中遗漏了三个关键的解决方案。
首先,我 运行 我所有的 shell 都在 TMux 中。其次,TMux 来源 .profile
。第三,在 .profile
中,一些本地目录(如上述 ~/.local/bin
被盲目地添加到 PATH 中。
综上所述,上述所有奇怪的行为都是有道理的。特别是 PATH 在 ~/.bashrc
末尾正确但在 shell 中不正确现在很明显; ~/.profile
.
解决这个问题的三种方法:
- 手动停用和激活 conda(临时解决方法)
- 更挑剔哪些 shells 在 TMux 中启动(非常不方便)
- 注释掉
~/.profile
中对 PATH 的操作
似乎无法将 TMux 配置为仅来源 ~/.bashrc
(reference 1,
这与 Bash 初始化文件有关。默认情况下,~/.bashrc
用于 交互式非登录 shell。它不会来自登录 shell。 Tmux 默认使用 login shell。因此,shells 由 tmux skip ~/.bashrc
.
default-command
shell-commandThe default is an empty string, which instructs tmux to create a login shell using the value of the
default-shell
option.
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 用户在个人资料中设置此设置。
参考资料
- Unix Shell Initialization
man tmux