1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Anacondaでactivate/deactivateするとホスト名が変わる問題

Last updated at Posted at 2019-10-02

#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は私のデスクトップのホスト名です。)

Zsh
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に記述されます。

.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 activateconda deactivateでCommandNotFoundと怒られることもなくなります。

##第2段階
さて、シェル起動時にホスト名が勝手に変わらず快適になりましたね。
仮想環境に入りましょう。

Zsh
MGE: ~ $ conda activate
(base) x86_64-conda_cos6-linux-gnu: ~ $

???

Zsh
(base) x86_64-conda_cos6-linux-gnu: ~ $ echo $HOST
x86_64-conda_cos6-linux-gnu

どうやら、conda activateconda deactivateするときにホスト名が書き換わっているようです。(第1段階をしていれば、シェルを再起動すれば仮想環境からも抜けますがホスト名は戻ります。)
環境変数を確認すると、おそらくCONDA_BACKUP_HOSTHOSTに入っているようです。
脳筋で戻すなら、

Zsh
# activateするとき
$ conda activate [環境名] && HOST=$(hostname)
# deactivateするとき
$ conda deactivate && HOST=$(hostname)
# activate/deactivateした後
$ HOST=$(hostname)

とすれば、ホスト名の環境変数を上書きして直せます。でも、ちょっと気持ち悪い...。
conda activateの中身を探ってみましたが、どこでCONDA_BACKUP_HOSTが環境変数に追加され、どこでHOSTが書き換わっているか確認できませんでした。
分かり次第追記したいと思います。

どなたか知っている方がいらっしゃれば、コメント頂けると幸いです。

この記事では、シェル起動時のHOST名の書き換えの解決までに。
拙文失礼いたしました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?