Kerasインストール済みのRStudioのDockerイメージがほしい。それだけのことができなくて、秋。みたいな。
たぶん私がPython弱者すぎていろいろやり方を間違えてるんだと思うんですけど、reticulateが思った通りに動いてくれなくてつらかった話をメモ。
virtualenv_create()
はPythonのバージョン指定を無視する
reticulateで使うPythonのバージョンは、RETICULATE_PYTHON
環境変数やuse_python()
で指定することができます。
しかし、virtualenv_create()
はその辺を無視して独自のロジックで使うPythonを選びます。なので、Python3を使っているつもりでkeras::keras_install()
をすると、Python2のvirtualenvにインストールされるのでPython3からは見つからない、という憂き目にあいます。
曰く、
You are correct that we currently prefer Python 2 to Python 3. This is mostly because just about every Linux distribution (until very recent ones like Ubuntu 18.04) shipped with Python 2 by default as did/does OS X.
だとか。2020年まであと1年ちょっとしかないのに、まじか...
まあいいか、おとなしく自分でvenvとかPipenvを使ってvirtualenvを作ってKerasをインストールすればいいか。
...と思うじゃないですか。
reticulateはvenvに対応していない(ということはたぶんPipenvもだめ)
reticulateは、bin/activate_this.py
があるかどうかでそのディレクトリがvirtualenvかどうかを判定しています(ここ)一方、
venvでつくった環境にはそれがないのでvirtualenvだとみなされません。
まじか...
(おまけ)Python3のvirutalenvをつくるには-p python3
これは完全に私がPython弱者すぎて知らなかっただけですが、
python3 -m virtualenv myvenv
ってやっとけばPython3の環境ができるかと思いきや、
python3 -m virtualenv -p python3 myvenv
で指定しないとダメでした。奥が深い。
Anacondaを使っておけば間違いないっぽい
Python弱者すぎて、Python界の勝手なイメージは私の中ではこういう認識↓
Python2を使っていると言うと石つぶてが投げられ、pipではなくcondaを使っていると言うと刺され、pyenvとpyvenvとvirtualenvのどれが正解か3秒以内に答えないと撃たれる、というのがPython界隈のイメージ #個人の感想です
— Hiroaki Yutani (@yutannihilation) 2017年10月26日
なので迫害されないか不安なんですが、condaを使ってればそもそもこういう問題は避けられます。install_keras()
は、condaがあるときはいい感じにcondaを使ってくれます。
平成ももう終わるというのに頑なにPython2をデフォルトにし続けるMacを使っていても安心です。
ただし、やっぱDockerイメージだとサイズが気になるのでなるべく入れたくない。まあ、rocker/tidyverse
という3GB超のDockerイメージを使っておいて何をいまさら、という感じはしますけど...
時間が解決してくれるかも
ちなみに、前者の問題に関してはpython
がPython3を指す、つまりシステムのデフォルトのPythonが3になれば解決する話です。
2020年ももうすぐなので、もうちょっと生きやすい世の中になると信じたい。生きる。