pyenvでインストールしたanacondaでenvironmentを作成してactivateするまで
pyenvでanacondaをインストールして、environmentを作成してactivateするまでハマったのでその手順をメモ
問題にぶち当たるまで
pyenvが入っていることを前提としてすすめる。
まずはanacondaのインストール。pyenv install -l
して、その時の最新のものを入れておけが良いと思う。
$ pyenv install anaconda3-5.3.1
成功した後、anacondaを使うプロジェクト(ディレクトリ)配下でanacondaを使うように指定する。
$ pyenv local anaconda3-5.3.1 $ pyenv versions pyenv versions system 3.7.6 3.7.7 3.8.2 * anaconda3-5.3.1
つぎに、そのプロジェクトで使用するenvironmentを作成する。
$ conda create -n myenv python=3.7.7
この時conda
のバージョンが古いとupdateするように促されるのでいったんCtrl+Cなどで中断してcondaを最新のものにupdateして、再度environmentを作成する。
$ conda update -n base -c defaults conda $ conda create -n myenv python=3.7.7
そしていざこの作成したenvironmentをactivateしようとすると下記のようなエラーが出る。
conda activate myenv CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'. To initialize your shell, run $ conda init <SHELL_NAME> Currently supported shells are: - bash - fish - tcsh - xonsh - zsh - powershell See 'conda init --help' for more information and options. IMPORTANT: You may need to close and restart your shell after running 'conda init'.
解決方法1
指示に従ってconda init zsh
などとすると.zchconfig
に下記のような行が加わる。
# >>> conda initialize >>> # !! Contents within this block are managed by 'conda init' !! __conda_setup="$('/Users/hogehoge/.pyenv/versions/anaconda3-5.3.1/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)" if [ $? -eq 0 ]; then eval "$__conda_setup" else if [ -f "/Users/hogehogel/.pyenv/versions/anaconda3-5.3.1/etc/profile.d/conda.sh" ]; then . "/Users/hogehoge/.pyenv/versions/anaconda3-5.3.1/etc/profile.d/conda.sh" else export PATH="/Users/hogehoge/.pyenv/versions/anaconda3-5.3.1/bin:$PATH" fi fi unset __conda_setup # <<< conda initialize <<<
これで新しいターミナル(タブ)を起動するとその時点でanacondaのbase environmentがactivateされた状態になる。
実際にやってみる。 上記のような状態で新しいターミナルを立ち上げる(zshを想定)。すると
(base) ➜ ~
のようにbase environmentがactivateされているのがわかる。
またこれはpyenv globalで指定したpythonとは別ものになる。
(base) ➜ ~ python --version Python 3.7.2 (base) ➜ ~ which python /Users/hogehoge/.pyenv/versions/anaconda3-5.3.1/bin/python (base) ➜ ~ pyenv versions system 3.7.6 3.7.7 * 3.8.2 (set by /Users/hogehoge/.pyenv/version) anaconda3-5.3.1 anaconda3-5.3.1/envs/myenv
anacondaしか使わないという環境なら問題ないかもだが、pyenvを使って素のpythonと共存するとなると競合して面倒なことになりそうでけっこう気持ちわるい。
解決方法2
こちらの方法のほうがスマートだと思う。
色々ググってたらこのようなIssueを見つけた。
このコメントが参考になる。
上記の.zshconfig
に書き込まれる内容をよく見てみるとconda' 'shell.zsh' 'hook'
をevalしているのがわかる。なので自分が必要なタイミングでやれば良いということのようだ。
➜ eval "$(conda shell.zsh hook)" (base) ➜ python --version Python 3.7.2
元に戻りたい時はconda deactivate
でいける。
なお、同Issue内の最初のほうにconda-build
をupdateすればいけるよ的なコメントもあったのでそれも試したが駄目だった。
その他
そもそもpyenv versions
の結果に作成した仮想環境がリストアップされているのでpyenv local anaconda3-5.3.1/envs/myenv
で指定すれば使えるのかなと思ったのだが、切り替わったあとにconda
コマンドを打つとコマンドが見つからないと怒られるのでこの使い方は駄目なのかなぁと思った。
環境
- macOS Catalina 10.15.5
- pyenv 1.2.18