#1. はじめに
Anacondaで仮想環境を出入りする時にシェルのホスト名が変わってしまう問題に出会ったのですが、公式のIssues( https://github.com/conda/conda/issues/7031 )以外に、特に日本語のドキュメントを見つけられなかったので記しておきます。
直さなくても問題ありませんが、個人的に気持ち悪かったので。
<環境>
- Ubuntu 18.04.3 LTS
- conda 4.7.11
- Zsh
※最後に根本的な解決ができていません。上記のIssuesを要約した感じです。
#2. 問題内容と(根本的でない)解決法
##第1段階
まず、Zshでcondaでの仮想環境を使用するためにconda init zsh
をすると、シェルが以下のように変化します。(MGEは私のデスクトップのホスト名です。)
MGE: ~ $ echo $HOST
MGE
MGE: ~ $ conda init zsh
no change /home/Jittsu/.pyenv/versions/anaconda3-5.3.0/condabin/conda
no change /home/Jittsu/.pyenv/versions/anaconda3-5.3.0/bin/conda
no change /home/Jittsu/.pyenv/versions/anaconda3-5.3.0/bin/conda-env
no change /home/Jittsu/.pyenv/versions/anaconda3-5.3.0/bin/activate
no change /home/Jittsu/.pyenv/versions/anaconda3-5.3.0/bin/deactivate
no change /home/Jittsu/.pyenv/versions/anaconda3-5.3.0/etc/profile.d/conda.sh
no change /home/Jittsu/.pyenv/versions/anaconda3-5.3.0/etc/fish/conf.d/conda.fish
no change /home/Jittsu/.pyenv/versions/anaconda3-5.3.0/shell/condabin/Conda.psm1
no change /home/Jittsu/.pyenv/versions/anaconda3-5.3.0/shell/condabin/conda-hook.ps1
no change /home/Jittsu/.pyenv/versions/anaconda3-5.3.0/lib/python3.7/site-packages/xontrib/conda.xsh
no change /home/Jittsu/.pyenv/versions/anaconda3-5.3.0/etc/profile.d/conda.csh
modified /home/Jittsu/.zshrc
==> For changes to take effect, close and re-open your current shell. <==
MGE: ~ $ source .zshrc
(base) x86_64-conda_cos6-linux-gnu: ~ $ echo $HOST
x86_64-conda_cos6-linux-gnu
このように、ホスト名の環境変数が邪魔ななげえやつに書き換えられます。この時、以下が.zshrc
に記述されます。
>>> conda initialize >>>
!! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/Jittsu/.pyenv/versions/anaconda3-5.3.0/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/home/Jittsu/.pyenv/versions/anaconda3-5.3.0/etc/profile.d/conda.sh" ]; then
. "/home/Jittsu/.pyenv/versions/anaconda3-5.3.0/etc/profile.d/conda.sh"
else
export PATH="/home/Jittsu/.pyenv/versions/anaconda3-5.3.0/bin:$PATH"
fi
fi
unset __conda_setup
<<< conda initialize <<
この状態だと、シェルを再起動してもホスト名が毎回書き換わってしまうため、この部分は削除するかコメントアウトして、. [conda.shまでのパス]
(私の環境だと. /home/Jittsu/.pyenv/versions/anaconda3-5.3.0/etc/profile.d/conda.sh
)を追記してください。
これで、シェル起動時にホスト名が書き換わることはなく、conda activate
、conda deactivate
でCommandNotFoundと怒られることもなくなります。
##第2段階
さて、シェル起動時にホスト名が勝手に変わらず快適になりましたね。
仮想環境に入りましょう。
MGE: ~ $ conda activate
(base) x86_64-conda_cos6-linux-gnu: ~ $
???
(base) x86_64-conda_cos6-linux-gnu: ~ $ echo $HOST
x86_64-conda_cos6-linux-gnu
どうやら、conda activate
、conda deactivate
するときにホスト名が書き換わっているようです。(第1段階をしていれば、シェルを再起動すれば仮想環境からも抜けますがホスト名は戻ります。)
環境変数を確認すると、おそらくCONDA_BACKUP_HOST
がHOST
に入っているようです。
脳筋で戻すなら、
# activateするとき
$ conda activate [環境名] && HOST=$(hostname)
# deactivateするとき
$ conda deactivate && HOST=$(hostname)
# activate/deactivateした後
$ HOST=$(hostname)
とすれば、ホスト名の環境変数を上書きして直せます。でも、ちょっと気持ち悪い...。
conda activate
の中身を探ってみましたが、どこでCONDA_BACKUP_HOST
が環境変数に追加され、どこでHOST
が書き換わっているか確認できませんでした。
分かり次第追記したいと思います。
どなたか知っている方がいらっしゃれば、コメント頂けると幸いです。
この記事では、シェル起動時のHOST名の書き換えの解決までに。
拙文失礼いたしました。