はじめに
Pythonは、chainerやtensorflowなどの分析パッケージが公開され、ますますデータ分析ツールとして注目を集めています。
そんなPythonをPostgreSQLのファンクション実装言語として利用できる機能に「PL/Python」というものがあります。
デフォルトでPL/PythonはシステムのPythonを使ってしまいます。
一方でシステムのPythonを汚したくない場合などでは、pyenvでPython環境を分離して分析パッケージを入れる場合がありそうです。
そこで、PL/Pythonの実行環境に、pyenvでインストールしたPythonを使う方法を調べました。
1. pyenvでのPythonインストール
PL/Pythonはlibpython~~.so
を参照します。
通常のpyenv install
では共有ライブラリはインストールされないので
以下のようにします。
CONFIGURE_OPTS="--enable-shared" pyenv install 2.7.10
これでpyenv側はOK
2. PostgreSQLでのPL/Pythonコンパイル
PostgreSQLはソースからコンパイルします。
https://github.com/postgres/postgres
ここから、git clone
すればいいと思います。
そして、configure
で以下のようにします。
./configure --prefix=/home/user/pgsql/pgsql9_5 --with-python=yes PYTHON=/home/user/.pyenv/versions/2.7.10/bin/python
--prefix
はつけてもつけなくてもいいです。
重要なのが
--with-python=yes
と
PYTHON=/home/user/.pyenv/versions/2.7.10/bin/python
--with-python=yes
はつけないと、そもそもPL/Pythonがコンパイルされません。
PYTHON=/home/user/.pyenv/versions/2.7.10/bin/python
はpyenvでインストールした
Pythonバイナリの場所を指定します。
するとpyenvのPythonを利用するようにPL/Pythonがコンパイルされます。
configure
を実行すると、生成されるMakefile.global
に以下の記述がされます。
python_includespec = -I/home/user/.pyenv/versions/2.7.10/include/python2.7
python_libdir = /home/user/.pyenv/versions/2.7.10/lib
python_libspec = -L/home/user/.pyenv/versions/2.7.10/lib -lpython2.7
※記述の先がpyenvのパスになっていなかったら直します。
あとは、PostgreSQLをmake; make install
すればPL/Pythonの実行環境がpyenvでインストールされたPythonとなっています。
補足
PostgreSQLごとコンパイルしたが、本来はPL/Pythonのみコンパイルしてもいいはず?