ちょっと煽ったタイトルですが、これから言いたいことを一言で言うとそういうことです。
またPython環境構築界隈の混沌が深まりそうで申し訳ないですが、自身の中ではそういう結論です。
まず、先に数件の別サイトの記事を紹介したいと思います。
qiita.com
qiita.com
ymotongpoo.hatenablog.com
上記ではpyenv
不要では?という議論がされています。
斜め読みした感じだと、「Pythonのバージョンを複数インストールして切り替える需要あるか?」 という点で、pyenv不要ということらしいです。
不要なら使わないに越したことはありませんね。
さて、機械学習・ディープラーニングするにはAnacondaが必須なのは異論のないところだと思いますが、
Anacondaのバージョンアップではこれに含まれるライブラリが非互換なAPI更新がちょくちょくあります。
また、バージョンアップ前後のライブラリでパフォーマンスを測りたい、とか。
すると、「Anacondaのバージョンを複数インストールして切り替える需要」が出てくるわけで。
こちらの方もそんな感じで、pyenv
+ Anacondaな環境をセットアップする方法を紹介しています。
qiita.com
とすると、この場合はpyenv
必要じゃね?となってくるわけです。
あともう一点、Anacondaはcurlとかの割と標準にあるコマンドを自身の中に持っていて、
普通にインストールすると/usr/bin/curl
ではなくAnacondaのものを使わせようとしてしまう現象があります。
これはAnacondaが悪いんですが、pyenv
はそこのところを面倒見てくれていて、
Anaconda以外のPythonが有効なときはきちんと/usr/bin/curl
を見るようにしてくれています。
asdf-vm
のPythonプラグインはそこのところを見てくれなかったので、私はpyenv
に乗り換えました。
以下参照。
team-6.hatenablog.jp
また、最近のpyenv
がいい(と僕が思っている)ところは、いろんなものが1つの親コマンドにまとまっていることです。
- インストーラ・アンインストーラ
- バージョンマネージャ
- 環境マネージャ
1.,2. はpyenv
一択だと思いますが、3.は議論が別れるところでしょう。
最近は公式のvenvが出てきたので、そちらを使う向きがあるでしょうが、pyenv
のほうが補完が聞いたり、
bin/activate
なんて謎コマンドではなくpyenv activate hoge
で済むので嬉しいです。hoge
の場所はpyenvが管理してくれます。
内部では、condaがあればそれを使うようです。これもまた議論が別れるところですね。
Pythonの仮想環境構築 2017.01版 - YAMAGUCHI::weblog にて、以下のような引用がありますが、
PythonにはThe Zen of Pythonという、Python自体の考え方や、それから派生したPythonで開発する上での指標となるものがあります。見たことがない人は次のコマンドで確認してください。
(略)
今回の話につながるところでいくと、次の3つがあります。
Simple is better than complex. (シンプルなのは複雑であることよりも良い)
There should be one– and preferably only one –obvious way to do it.(1つだけ、できれば唯一、の明らかな方法があれば良い)
If the implementation is hard to explain, it’s a bad idea.(その実装の説明が難しいなら、そのアイデアは良くない)
ツールに関してもそうです。シンプルなものがあればそれを使おう、なるべくシンプルな構成にしよう、という考え方です。
単一のツールで済むというのは、上記にそれほど反しないと思います。
そんなpyenv系(pyenv
+ pyenv-virtualenv
, ついでにAnaconda)の使い方です。
# Install pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
exec "$SHELL"
# Install pyenv-virtualenv
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
exec "$SHELL"
# Install Anaconda
pyenv install -l # インストール可能なバージョン一覧を表示する、pyenv install までタイプしてTABでもいい
pyenv install anaconda3-4.4.0 # めっちゃ時間かかる
pyenv local anaconda3-4.4.0 # .python-version が作成され、カレントディレクトリのPythonのバージョンが固定される
# Create new environment
pyenv virtualenv anaconda3-4.4.0 my-env
# 追加パッケージのインストールが始まる
pyenv activate my-env # my-envの有効化
pyenv deactivate # 環境の無効化
綺麗に操作がpyenv
でまとまっていますね!
パッケージ管理についてはpip
かconda
かに分かれてしまいますが、それは致し方ないでしょう。
将来的にはどうなるかわかりませんが、“今”Pythonで“機械学習・ディープラーニングする環境”を作るならpyenv系一択だと思います(※個人の感想です)。