はじめに
Rの仮想環境を使いたいのでRenvをインストールしました。
その時の手順メモ。
そもそもの目的は、spark 2.2.0をR付きでビルドすることだったのですが、SparkRで使用するR (3.3.2)と、ビルド環境のR (3.4.2)が異なっており、起動するとエラーになってしまうため、ビルド環境にR 3.3.2をインストールする必要がありました。
そこで、Renvを使えば簡単に任意のバージョンで仮想環境を作れそうだったのでやってみました。
手っ取り早くインストールしたい人へ
Gistにスクリプト置いときます。
自己責任でどうぞ。
環境
- OS: CentOS6.9
- CPUs:4
- Memory: 8GB
インストールするもの
- Renv: https://github.com/viking/Renv
- Rの仮想環境管理ツール。基本的な機能はpyenvなどと同じですが、Renv単体ではRのInstallができません。
- R-build: https://github.com/viking/R-build
- RenvからRをインストールできるようにするPlugin。
手順
Install Renv
基本READMEに書いてある通りです。
$ git clone https://github.com/viking/Renv.git .Renv
$ echo 'export PATH="$HOME/.Renv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(Renv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ Renv versions
Install R-build
こちらもREADMEのまま。
$ mkdir -p ~/.Renv/plugins
$ cd ~/.Renv/plugins
$ git clone https://github.com/viking/R-build.git
Install dependencies
依存するパッケージをインストールします。
CentOS6.9にyumでインストールできるパッケージはバージョンが古いので、ソースからビルドします。
これが面倒臭かった。
- ソースファイルのダウンロード先:
$HOME/src
- ライブラリのインストール先:
$HOME/local
必要なソースファイルをダウンロード
$ wget https://jaist.dl.sourceforge.net/project/libpng/zlib/1.2.11/zlib-1.2.11.tar.gz -P $HOME/src
$ wget http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz -P $HOME/src
$ wget https://tukaani.org/xz/xz-5.2.3.tar.gz -P $HOME/src
$ wget https://jaist.dl.sourceforge.net/project/pcre/pcre/8.40/pcre-8.40.tar.gz -P $HOME/src
$ wget https://curl.haxx.se/download/curl-7.52.1.tar.gz -P $HOME/src
$ wget http://cran.r-project.org/src/base/R-3/R-3.3.2.tar.gz -P $HOME/src
各tar ballを展開
一気にいきましょう。
$ cd $HOME/src
$ ls | xargs -n 1 -IFILE tar xzvf FILE
Install zlib
$ cd $HOME/src/zlib-1.2.11
$ ./configure --prefix=$HOME/local | tee configure.log
$ make -j 4 | tee make.log
$ make install -j 4 | tee make-install.log
Install bzip2
$ cd $HOME/src/bzip2-1.0.6
$ cp Makefile Makefile.org
$ sed -i 's/CFLAGS=-Wall/CFLAGS=-fPIC -Wall/' Makefile
$ make clean
$ make -j 4 | tee make.log
$ make install -j 4 PREFIX=$HOME/local | tee make-install.log
Install xz
$ cd $HOME/src/xz-5.2.3
$ ./configure --prefix=$HOME/local | tee configure.log
$ make -j 4 | tee make.log
$ make install -j 4 | tee make-install.log
Install pcre
$ cd $HOME/src/pcre-8.40
$ ./configure --prefix=$HOME/local --enable-utf8 | tee configure.log
$ make -j 4 | tee make.log
$ make install -j 4 | tee make-install.log
Install curl
$ cd $HOME/src/curl-7.52.1
$ ./configure --prefix=$HOME/local | tee configure.log
$ make -j 4 | tee make.log
$ make install -j 4 | tee make-install.log
Install R 3.3.2
本来はR-buildを使って様々なバージョンのRをインストールできるはずだったのですが、今回必要だったR 3.3.2のconfigureスクリプトにバグがあって、Renv install 3.3.2
としてもエラーになってしまいます。
仕方がないのでマニュアルインストールします。
$ echo 'export CPPFLAGS="-I$HOME/local/include"' >> ~/.bash_profile
$ echo 'export LDFLAGS="-L$HOME/local/lib"' >> ~/.bash_profile
$ echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/local/lib' >> ~/.bash_profile
$ source ~/.bash_profile
$ cd $HOME/src/R-3.3.2
$ cp configure configure.org
$ vim configure
# Modify it!
# - exit(strncmp(ZLIB_VERSION, "1.2.5", 5) < 0);
# + exit(strncmp(ZLIB_VERSION, "1.2.5", 5) < 0 && (strlen(ZLIB_VERSION) < 6 || strncmp(ZLIB_VERSION, "1.2.10", 6) < 0));
$ ./configure --prefix=$HOME/.Renv/versions/3.3.2 --with-cairo --with-jpeglib --with-readline --with-tcltk --with-blas --with-lapack --enable-R-profiling --enable-R-shlib --enable-memory-profiling | tee configure.log
$ make -j 4 | tee make.log
$ make install -j 4 | tee make-install.log
動作確認
$ Renv versions
* 3.3.2 (set by /home/tommarute/.Renv-version)
$ R --version | head -n 1
R version 3.3.2 (2016-10-31) -- "Sincere Pumpkin Patch"
3.3.2の環境を作れました。
ちなみに
今回のようなバグに当たらなければ、R-buildで簡単インストールができるので、そちらも載せておきます。
なお、ビルドはお茶できるくらい時間がかかりますので、気長に待ちましょう。
$ time Renv install 3.4.0
Downloading http://cran.r-project.org/src/base/R-3/R-3.4.0.tar.gz...
Installing R-3.4.0...
Installed R-3.4.0 to /home/tommarute/.Renv/versions/3.4.0
real 6m9.461s
user 7m52.355s
sys 0m28.685s
$ Renv versions
* 3.3.2 (set by /home/tommarute/.Renv-version)
3.4.0
$ Renv shell 3.4.0
$ R --version | head -n 1
R version 3.4.0 (2017-04-21) -- "You Stupid Darkness"
おわりに
RenvとR-buildを使ってRの仮想環境を作りました。
最近はなんでも仮想環境あって便利ですね。
anyenvも使ってみたいです。