Search code examples
pythonpostgresqlanacondaplpython

PL/Python with Anaconda


I've got Anaconda installed on a Ubuntu and would like to use some of it's modules in PL/Python. However, every time I call scipy, it errors with ImportError: No module named scipy.stats.

How do I get the Anaconda to work with PL/Python?

UPDATED: Below is the code & the error

CREATE OR REPLACE FUNCTION hdi_bars( numerator integer, denominator integer) RETURNS SETOF double precision[] AS $BODY$

from scipy.stats import beta import numpy as np from scipy.stats import beta import numpy as np

$BODY$ LANGUAGE plpythonu VOLATILE COST 100 ROWS 1000; ALTER FUNCTION hdi_bars(integer, integer) OWNER TO postgres;

ERROR: ERROR: ImportError: No module named scipy.stats CONTEXT: Traceback (most recent call last): PL/Python function "hdi_bars", line 5, in from scipy.stats import beta PL/Python function "hdi_bars"

********** Error **********

ERROR: ImportError: No module named scipy.stats SQL state: XX000 Context: Traceback (most recent call last): PL/Python function "hdi_bars", line 5, in from scipy.stats import beta PL/Python function "hdi_bars"


Solution

  • Based on the Postgres installation/configuration docs, there is an environment variable PYTHON which can be set to the full path of the executable for Python that you want. Otherwise, the default --with-python behavior will look for the system Python, most likely at /usr/bin/python or similar standard location for other operating systems.

    This question and answer seems to confirm that to alter it, you need to rebuild Postgres from source.