LoginSignup
11

More than 5 years have passed since last update.

PL/Pythonの実行環境にpyenvでインストールしたPythonを使う

Last updated at Posted at 2015-11-12

はじめに

Pythonは、chainertensorflowなどの分析パッケージが公開され、ますますデータ分析ツールとして注目を集めています。
そんな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のみコンパイルしてもいいはず?

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11