メモ:reticulateがPython3になってくれなくて生きるのがつらい

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界の勝手なイメージは私の中ではこういう認識↓

なので迫害されないか不安なんですが、condaを使ってればそもそもこういう問題は避けられます。install_keras()は、condaがあるときはいい感じにcondaを使ってくれます。 平成ももう終わるというのに頑なにPython2をデフォルトにし続けるMacを使っていても安心です。

ただし、やっぱDockerイメージだとサイズが気になるのでなるべく入れたくない。まあ、rocker/tidyverseという3GB超のDockerイメージを使っておいて何をいまさら、という感じはしますけど...

時間が解決してくれるかも

ちなみに、前者の問題に関してはpythonがPython3を指す、つまりシステムのデフォルトのPythonが3になれば解決する話です。 2020年ももうすぐなので、もうちょっと生きやすい世の中になると信じたい。生きる。