tmux 导致 anaconda 使用不同的 python 源

len*_*niX 17 tmux python

好的,所以我在我的 anaconda 环境中,我运行了 which python。我得到

/home/comp/anaconda3/envs/env1/bin/python
Run Code Online (Sandbox Code Playgroud)

现在,如果我启动 tmux,然后运行 ​​source activate env1,然后运行哪个 python,我会得到

/home/comp/anaconda3/bin/python
Run Code Online (Sandbox Code Playgroud)

即使我确实激活了我的环境。如何让 anaconda 在 tmux 中看到相同的路径?

小智 24

解决方法似乎是停用conda环境,然后启动tmux,然后重新激活tmux内的环境。

  • 奇怪的解决方案,但有效...... (2认同)
  • 这确实很奇怪。 (2认同)
  • 我正在投票,因为这是对我有用的解决方案,但这确实远非理想的解决方案 (2认同)
  • 为我工作,有更永久的解决方案吗? (2认同)

Sid*_*shi 8

我遇到了同样的问题,但我真的不喜欢任何解决方案,因为它们涉及每次加载到tmux. 因此,我将以下内容添加到我的.tmux.conf

重要编辑:此代码对我有用,因为我当前正在运行 zsh shell,这是存储我的设置的位置。您的标准 shell 可能有所不同,要查找您的 shell 位置,请使用该命令echo "$SHELL"并将我的答案中的 替换/bin/zsh为您自己的 shell 路径。

set -g default-command "/bin/zsh"
Run Code Online (Sandbox Code Playgroud)

完成后,只需为您的.tmux.conf文件提供资源即可激活更改。这应该允许tmux加载您在.bash_profileConda 中拥有的任何设置。

  • 更一般的答案可能是 `set -g default-command "${SHELL}"` (我不确定 $SHELL 是否应该始终由 shell 设置,但我希望这通常可以工作)。 (3认同)
  • 请不要假设他的 shell 是 `zsh` (他没有提到)。如果没有它的人使用您的答案,他们可能会遇到问题。也许你还应该多解释一下为什么它能解决这个问题,比如那里的“-g”是什么,默认值的作用等等…… (2认同)

Max*_*ner 6

此行为是由 TMux 来源~/.profile而不是~/.bashrc. 我的~/.profile是这样的:

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi
Run Code Online (Sandbox Code Playgroud)

您可以看到,first ~/.bashrc是sourced,然后 ~/bin~/.local/bin前置的据我自己的经历,这会导致conda打嗝。

解决方案是注释掉 中操作 PATH 的两个块~/.profile

编辑(2019/09/24):更好的方法似乎是配置 TMux,使其不会生成登录 shell,而只是生成一个普通的 shell。请参阅链接问题的答案。

  • 作为参考,为了防止 tmux 生成登录 shell:https://superuser.com/a/1330842/72533。 (2认同)