DEVGRU

プログラミングと競馬予想について書きます

今Pythonで機械学習・ディープラーニングする環境を作るならpyenv系一択だよね(※個人の感想です)

ちょっと煽ったタイトルですが、これから言いたいことを一言で言うとそういうことです。 また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. バージョンマネージャ
  3. 環境マネージャ

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でまとまっていますね!

パッケージ管理についてはpipcondaかに分かれてしまいますが、それは致し方ないでしょう。

将来的にはどうなるかわかりませんが、“今”Pythonで“機械学習・ディープラーニングする環境”を作るならpyenv系一択だと思います(※個人の感想です)。

入門 Python 3

入門 Python 3

詳細!Python 3 入門ノート

詳細!Python 3 入門ノート

実践 Python 3

実践 Python 3

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング