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
でインストールできます。( 彡()() なんで最初にこれを試さなかったか… )
> pip install rpy2
オフライン環境の場合は、rpy2
をPyPI - rpy2 download filesからダウンロードしたソース ファイル(rpy2-3.4.2.tar.gz)のパスで置き換えます。必要に応じてtzlocal
も手動でインストールします。
試しに以下を実行してみます。ちゃんと円周率の値が出れば成功です。
import rpy2.robjects as robjects
pi = robjects.r['pi']
print(pi[0]) #3.141592653589793が出ればOK
condaでインストール
これで終わりだとつまらないので、「Anacondaなのでpipを使うのは…」と思った方のために、もう一つネタを追加します。
condaの場合は、conda install rpy2
だと失敗するため、
こちらを参考に、以下のコマンドでPyPIのソースコードからcondaパッケージを作成してインストールします:
> 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
のインポート時に以下のエラーが出たら、tzlocal
をconda
でインストールします。
ModuleNotFoundError: No module named 'tzlocal'
蛇足:.whlファイル作成 & pipでインストール
この部分は蛇足です。ソースコードから.whlファイルをビルドしてインストールする方法を説明します。
- PYPI - rpy2 download Filesからソース ファイルをダウンロード
- 7-Zipなどで.tar.gzファイルを解凍
- 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ファイルにそれっぽいものが含まれていない)。
参考
- 公式ドキュメント v3.4.x Installation
- Condaパッケージの作成方法
- rpy2導入時に発生した問題点
- Compile `rpy2` (API mode) on Windows #624
- Rpy2の使い方の備忘録
全く気乗りしないけどRの勉強を始めるか
('A`)...