python環境構築決定版の補足です。
20180312追記
2017-12-20付けでリリースされたconda 4.4.0でconda activate
が採用されたようです。
conda/CHANGELOG.md
現状では source activate
が廃止されたわけではないようですが、conda activate
が推奨されています。
最近dockerがこなれてきた (proxy越しwindows環境でもストレスを感じない)ため、pyenvを挟む必要性が減っており、私もdocker-anacondaに移行していますが、参考まで。
コメントで情報いただきました。
ありがとうございます。
pyenvとanacondaのactivate衝突問題とは?
linuxやMacではpyenvを介してanacondaをインストールできます。
更に、anacondaで複数開発環境の切り替えをしたいケースがあると思います。
anacondaでの環境は、source activate <環境名>
として切り替えを行えますが、pyenvの下では下記のようなエラーが出てシェルごと落ちます。
$ source activate
#>>> pyenv: -bash: command not found
理由はよくわかりませんが、pyenvがshimスクリプトを使ってpathをのっとっているので、変な事が起こっているのかもしれません。
anacondaがconda activate
を採用してくれていれば... orz
解決策
1. pyenvを使わない。
決定版は基本的にこの方法を紹介しています。
この方法ではpyenvはanacondaのインストーラとしてのみ使います。
pyenv経由でanacondaをインストール後に、pathへanacondaのインストールpathを書き込んで、pyenvを無視させます。
$ echo 'export PATH="$PYENV_ROOT/versions/anaconda3-2.5.0/bin/:$PATH"' >> ~/.bashrc
- メリット: 一番設定が少なく、覚えることが少ない。
- デメリット:
pyenv local
が使えない。
この方法では、pathを設定した後はpyenvを全く意識することがなくなります。
環境切り替えは全部source activate
を用います。
2. activateをフルパスで実行する。
1.ではpyenv local
が使えなくなりますが、これが致命的な人もいると思います。
特にweb開発系の人で、PJ毎にパッケージの依存関係を変えたい人などは、pyenv local
で作業フォルダ毎に環境を切り替えた方が効率的だと思います。
単純な解決策ですが、activateをフルパスで指定すれば、condaのactivateを指定して実行できます。
$ source $PYENV_ROOT/versions/anaconda3-2.5.0/bin/activate <環境名>
- メリット: シンプル
- デメリット1: activateするのにタイプ量が多い
デメリットはaliasを設定すれば解決しますね。
$ echo 'alias activate="source $PYENV_ROOT/versions/anaconda3-2.5.0/bin/activate"' >> ~/.bashrc
$ source ~/.bashrc
あれ?これでよくね??
pyenv local
を使えば作業フォルダごとに環境を切り替えられます。
$ conda create -n py2 python=2.7
$ mkdir py2
$ cd py2
$ pyenv local anaconda3-2.5.0/envs/py2
$ python
#>>>Python 2.7.11 |Continuum Analytics, Inc.| (default, Dec 6 2015, 18:08:32)
#>>>[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
環境切り替えはactivate
とpyenv local
を併用します。
3. pyenv-virtualenvを入れる
決定版の追記で記載した方法です。
pyenvのプラグインであるpyenv-virtualenvを入れて、pyenv activate
を使います。
インストール
$ git clone git://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
source ~/.bashrc
pyenv-virtualenvの簡単な使い方
$ conda create -n py2 python=2.7
$ mkdir py2
$ cd py2
$ pyenv activate anaconda3-2.5.0/envs/py2
$ python
#>>>Python 2.7.11 |Continuum Analytics, Inc.| (default, Dec 6 2015, 18:08:32)
#>>>[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
$ pyenv deactivate
source activate
を間違えて使うと、やっぱりシェルが落ちるので注意。
メリット: 多分正しい使い方。
デメリット: このためだけにpyenv-virtualenvを入れるのも...
環境切り替えはpyenv activate
とpyenv local
を併用します。
メモ
いずれの方法も仮想環境管理はcondaを用います。(virtualenvは使わない。)
1-3のどれを選ぶかは好みだと思います。私は、今まで1派でしたが最近2派になりました。