rpy2のインストール（Windows向け ）

[rpy2](https://rpy2.github.io/doc/latest/html/index.html)とは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のパスは環境変数に設定していません。


<!-- - Rtools: 4.0
- コンパイラー: msvc2019

Rtoolsはいらないかもしれません。コンパイラーはgccとかも入っていますが、たぶんmsvcがあれば大丈夫です。msvcはVisual StudioまたはBuild Tools for Visual Studioの**Visual C++ Build Tools**ワークロードをインストールすればOKです。 -->

# pipでインストール
<!-- コンパイラーさえインストールしていれば、 -->
[公式のドキュメント](https://rpy2.github.io/doc/v3.4.x/html/overview.html#docker-image)には「Windowsの人はDocker使ってね [キラッ☆](https://dic.pixiv.net/a/%E3%82%AD%E3%83%A9%E3%83%83%E2%98%86)」と書かれていますが、他のパッケージと同様`pip`でインストールできます。（ 彡()() なんで最初にこれを試さなかったか… ）

```powershell:PowerShell
> pip install rpy2
```
オフライン環境の場合は、`rpy2`を[PyPI - rpy2 download files](https://pypi.org/project/rpy2/#files)からダウンロードしたソース ファイル（rpy2-3.4.2.tar.gz）のパスで置き換えます。必要に応じて[`tzlocal`](https://pypi.org/project/tzlocal/#files)も手動でインストールします。


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

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

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

condaの場合は、`conda install rpy2`だと失敗するため、
[こちら](https://qiita.com/iisaka51/items/5828a50744be209705d0#%E6%97%A2%E5%AD%98%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%8B%E3%82%89conda%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AB%E5%A4%89%E6%8F%9B)を参考に、以下のコマンドでPyPIのソースコードからcondaパッケージを作成してインストールします:

```powershell: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`のインポート時に以下のエラーが出たら、`tzlocal`を`conda`でインストールします。

```
ModuleNotFoundError: No module named 'tzlocal'
```

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

1. [PYPI - rpy2 download Files](https://pypi.org/project/rpy2/#files)からソース ファイルをダウンロード
2. 7-Zipなどで.tar.gzファイルを解凍
3. Powershellで以下のコマンドを実行

```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,
(略)
```


# 試してみて失敗したこと

## 非公式バイナリーからのインストール
[非公式バイナリー](https://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2)は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](https://rpy2.github.io/doc/v3.4.x/html/overview.html#installation)
- [Condaパッケージの作成方法](https://qiita.com/iisaka51/items/5828a50744be209705d0#%E6%97%A2%E5%AD%98%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%8B%E3%82%89conda%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AB%E5%A4%89%E6%8F%9B)
- [rpy2導入時に発生した問題点](https://qiita.com/pomta/items/a5ab5e296c746fe669f0)
- [Compile \`rpy2\` (API mode) on Windows #624](https://github.com/rpy2/rpy2/issues/624)
- [Rpy2の使い方の備忘録](https://qiita.com/MTNakata/items/04a045f4beb0fa9e3a4d)

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