Hatena::ブログ(Diary)

Life, don’t talk to me about life. このページをアンテナに追加

2009-05-16

MacにRとrpyをインストールしようとしてどん詰まりになっている今日この頃

| 10:50 |  MacにRとrpyをインストールしようとしてどん詰まりになっている今日この頃を含むブックマーク  MacにRとrpyをインストールしようとしてどん詰まりになっている今日この頃のブックマークコメント

Mac仕事をするのに、rpyを使っているソフトがあるので、そいつをインストールしようとしました。

まずはRのインストールからです。

Rのサイトに.dmgファイルがあって、バイナリインストールできるのでとりあえずインストールしました。いざrpyのインストールに進もうとしてググってみると、

Rはソースからコンパイル。enable-R-shlibオプションをつけるのを忘れずに、というより配布されていたバイナリはこれつきでコンパイルされてないようなのでそのままではrpyが入らないはず。

http://blog.kzfmix.com/entry/1217061926

という情報があって振り出しに戻る。

つぎは、ソースからコンパイルだ、ということで、configure --enable-R-shlib をやるも、どうもライブラリが探せないとかなんとか。この辺は多分自分スキルの問題だと思いますが。それでまた調べていると、Macに最初から入っているgcc4.0.1はバグがあるから、違うの使った方がいいよ、とのこと。なので、まずは最新のgcc4.4を

sudo port install gcc44 +gfortran

インストール。variantsのリストに入ってないくせに、+gfortranなんてできるのな。この辺のメンテをちゃんとやってもらいたいものですよ、ほんと。まあ、自分コミットしろって話なんですが。

で、Rをコンパイルしようとしたら、どうもエラーが出る。objective-cエラーなんですが、よくわからなかったです。で、MacPortsの方のRはどうだろうと思ってみて /opt/local/var/macports/sources/rsync.macports.org/release/ports/math/R/Portfile を見てみると、

configure.args   --mandir=\\\${prefix}/share/man \
                 --enable-R-shlib \
                 --disable-nls \
                 --without-libintl-prefix \
                 --disable-R-framework \
                 --without-aqua \
                 --with-tcl-config=${prefix}/lib/tclConfig.sh \
                 --with-tk-config=${prefix}/lib/tkConfig.sh \
                 --x-include=${prefix}/include \
                 --x-lib=${prefix}/lib

とあるのでR-shlibはオンになっている模様。だったらこれでいいやと、

sudo port install r

インストール。あ、そのまえに、これをやるにはgcc43が必要とかでこれもインストールしたんだ。gccインストールは4時間以上かかるので、インストールし終わった頃には自分が何をやろうとしていたか既に忘れてしまっていたりしますが、なんとか気を取り直してインストールできました。

ようやくrpyのインストールに向かいます。やれやれ

rpyはMacPortsにないようだったので、これはソースから。颯爽とビルドスクリプトを走らせるとFrameworkがねーよ、と言われます。そう、MacPortsからインストールしたRは--disable-R-framework付き。うぅ。うぅ。

また振り出しに戻りました。

(追記)

RのビルドエラーはFrameworkのobjective-Cがらみっぽいので、もしかしたらapple-gccなら、と思って、gcc_select gcc42にしてやってみるも、configureで

checking iconv.h usability... yes
checking iconv.h presence... yes
checking for iconv.h... yes
checking for iconv... no
checking for iconvlist... no
configure: error: --with-iconv=yes (default) and a suitable iconv is not available

で止まってしまいます。ちゃんと/usr/lib/libiconv.*とかあるんだけどなあ。

(追記)

もしかしたらと思って、バグがあるとか言いつつもどうなのよ、ってな感じでapple-gcc40、つまり最初からXcodeで入るやつでビルドしてみました。libintl.hの場所でエラーが出ましたが、これを解消すると、makeが通りました。なんだよー。でも、どの辺がバグッてるのかは気になりますね。入力したコマンドは、

./configure --enable-R-shlib \
    --x-includes=/opt/local/include/X11 \
    --x-libraries=/opt/local/lib \
    --without-libintl-prefix
make
sudo make install

(追記)

やっとRがインストールできたと思ったら、今度はrpyのインストールでこける。

$ sudo python setup.py install
RHOMES= []
DEBUG= True
Setting RHOMES to  ['/Library/Frameworks/R.framework/Resources']
### Using R verion 2.9.0 installed at /Library/Frameworks/R.framework/Resources ###
RHOME= /Library/Frameworks/R.framework/Resources
copying src/rpymodule.c -> src/rpymodule2090.c
copying src/R_eval.c -> src/R_eval2090.c
copying src/io.c -> src/io2090.c
running install
running build
running build_py
running build_ext
building '_rpy2090' extension
/usr/bin/gcc-4.0 -fno-strict-aliasing -Wno-long-double -no-cpp-precomp -mno-fused-madd -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DWITH_NUMERIC=3 -DPY_ARRAY_TYPES_PREFIX=PyArray_ -DRPY_SHNAME=_rpy2090 -DINIT_RPY=init_rpy2090 -UPRE_2_2 -I/Library/Frameworks/R.framework/Resources/include -Isrc -I/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/numpy/core/include -I/opt/local/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5 -c src/rpymodule2090.c -o build/temp.macosx-10.5-i386-2.5/src/rpymodule2090.o
In file included from src/RPy.h:57,
                 from src/rpymodule2090.c:51:
/Library/Frameworks/R.framework/Resources/include/R_ext/Rdynload.h:26: warning: function declaration isn’t a prototype
In file included from src/rpymodule2090.c:51:
src/RPy.h:77:51: error: Rdevices.h: No such file or directory
src/rpymodule2090.c:1565: warning: initialization from incompatible pointer type
src/rpymodule2090.c:1568: warning: ‘intargfunc’ is deprecated
src/rpymodule2090.c:1568: warning: initialization from incompatible pointer type
src/rpymodule2090.c:1569: warning: ‘intintargfunc’ is deprecated
src/rpymodule2090.c:1569: warning: initialization from incompatible pointer type
src/rpymodule2090.c:1570: warning: initialization from incompatible pointer type
src/rpymodule2090.c: In function ‘r_finalize’:
src/rpymodule2090.c:1782: warning: implicit declaration of function ‘Rf_KillAllDevices’
src/rpymodule2090.c:1788: warning: implicit declaration of function ‘R_CleanTempDir’
src/rpymodule2090.c:1776: warning: unused variable ‘tmpdir’
src/rpymodule2090.c:1775: warning: unused variable ‘buf’
error: command '/usr/bin/gcc-4.0' failed with exit status 1

python setup.pyで使われるgccを変更するにはpython自体を再ビルドしないとダメなの?もうどんづまり。

(追記)

できたよー。

rpyのリリース版はR-2.9.0に対応してなかったのですが、svnから最新のソースコードをとってくることでビルドできました。

svn co http://rpy.svn.sourceforge.net/svnroot/rpy/trunk/rpy rpy
sudo python setup.py install

長かったなあ。もう一回やれって言われたら簡単な訳だけど。

トラックバック - http://d.hatena.ne.jp/mojin/20090516/1242463801