rpy2のインストール(Windows向け )


rpy2とはPythonからRを実行できるようにするライブラリーです。

Windowsでのrpy2のインストール方法が説明されているサイトが無かったので作成しました。pipで簡単にできましたが、逆に出来ないとか苦労したとかいうサイトがあふれています。なぜそのような混乱が生じているのかはわかりませんが。

環境

  • rpy2: 3.4.2
  • OS: Windows 10 May 2020 Update(バージョン2004)
  • Python: 3.8.8 (Anaconda)
  • R: 4.0.4

Rがないとパッケージのインストールに失敗します。また、インストール時にバージョン情報をレジストリーに登録しましたが、Rのパスは環境変数に設定していません。

pipでインストール

公式のドキュメントには「Windowsの人はDocker使ってね キラッ☆」と書かれていますが、他のパッケージと同様pipでインストールできます。( 彡()() なんで最初にこれを試さなかったか… )

PowerShell
> pip install rpy2

オフライン環境の場合は、rpy2PyPI - rpy2 download filesからダウンロードしたソース ファイル(rpy2-3.4.2.tar.gz)のパスで置き換えます。必要に応じてtzlocalも手動でインストールします。

試しに以下を実行してみます。ちゃんと円周率の値が出れば成功です。

python
import rpy2.robjects as robjects
pi = robjects.r['pi']
print(pi[0]) #3.141592653589793が出ればOK

condaでインストール

これで終わりだとつまらないので、「Anacondaなのでpipを使うのは…」と思った方のために、もう一つネタを追加します。

condaの場合は、conda install rpy2だと失敗するため、
こちらを参考に、以下のコマンドでPyPIのソースコードからcondaパッケージを作成してインストールします:

Anaconda_Poershell_Prompt
> conda install -n base conda-build     # ビルドに必要なパッケージのインストール
> conda skeleton pypi rpy2  # スケルトン作成
> conda build rpy2          # ビルド
> conda install パッケージのパス

パッケージのパスは(Anacondaインストール先)/conda-bld/win-64/rpy2-3.4.2-py38_0.tar.bz2です、たぶん。私が実行したときには、3つめのコマンドで、ビルド後のテスト中に以下のエラーが出たため、パッケージのパスが(Anacondaインストール先)/conda-bld/broken/rpy2-3.4.2-py38_0.tar.bz2になってしまいました。ipython入っているのになぜエラーが出るのか。。。

(略)
ModuleNotFoundError: No module named 'IPython'
(%PREFIX%) %SRC_DIR%>IF 1 NEQ 0 exit /B 1
Tests failed for rpy2-3.4.2-py38_0.tar.bz2 - moving package to C:\ProgramData\Anaconda3\conda-bld\broken
(略)
TESTS FAILED: rpy2-3.4.2-py38_0.tar.bz2

Pythonでrpy2.robjectsのインポート時に以下のエラーが出たら、tzlocalcondaでインストールします。

ModuleNotFoundError: No module named 'tzlocal'

蛇足:.whlファイル作成 & pipでインストール

この部分は蛇足です。ソースコードから.whlファイルをビルドしてインストールする方法を説明します。

  1. PYPI - rpy2 download Filesからソース ファイルをダウンロード
  2. 7-Zipなどで.tar.gzファイルを解凍
  3. Powershellで以下のコマンドを実行
PowerShell
> cd 解凍先フォルダー   # 解凍先フォルダーはsetup.pyがあるフォルダー
> python setup.py bdist_wheel   # パッケージ作成。`dist`フォルダーにrpy2-3.4.2-py3-non-any.whlができる。
> pip install ./dist/rpy2-3.4.2-py3-non-any.whl # インストール
> pytest --pyargs 'rpy2.tests'

最後のテストで以下が出てきますが、たぶん大丈夫です。

(略)
=================================================================== short test summary info ====
FAILED rinterface/test_vector_str.py::test_non_asciil - UnicodeDecodeError: 'utf-8' codec can't 
======================================== 1 failed, 696 passed, 64 skipped, 4 xfailed, 1 xpassed,
(略)

試してみて失敗したこと

非公式バイナリーからのインストール

非公式バイナリーはrpy2 2.9.5, Python 3.7で更新が止まっているため、Python 3.8には使えませんでした。公式のドキュメントにも以前は非公式バイナリーの紹介がありましたが、現在(3.4.x)はなくなっています。

conda-forgeからインストール

condaのチャネルにconda-forgeを追加して、codnda install rpy2を実行してみましたが、Python 3.8以上だとダメでした。

ソースコードのC言語部分だけをビルド

リンクエラーが出まくりました。そもそもCのビルドは必要ありませんでした(.whlファイルにそれっぽいものが含まれていない)。

参考

全く気乗りしないけどRの勉強を始めるか
('A`)...