Thread: plpython module import errors
Hello, I have installed postgresql 9 on fedora 14 having python 2.7. Now created plpythonu language in my database and created a simple function to calculate sum of two variables. while importing math libbrary and executing the function i got the error PL/Python: ImportError: No module named cmath tried to search help for this error on net and tried various things but nothing solved this. What can I do to solve this error. I can still work from python interpreter directly. Thanks in advcance. C P Kulkarni
On 04/28/2011 02:19 PM, c k wrote: > Hello, > I have installed postgresql 9 on fedora 14 having python 2.7. Now > created plpythonu language in my database and created a simple > function to calculate sum of two variables. > while importing math libbrary and executing the function i got the error > PL/Python: ImportError: No module named cmath > > tried to search help for this error on net and tried various things > but nothing solved this. > What can I do to solve this error. > I can still work from python interpreter directly. > Thanks in advcance. > C P Kulkarni This can happen if you have more then one version of python on the server and the postgresql is using a different one then you do on the command line. This is becuase modules are installed per version of python. The easiest way to check this is: create or replace function pyver() returns text as $$ import sys return sys.version $$ language 'plpythonu'; select pyver() and see if the version it returns is the same one as when you open the interpreter. Sim
mv python python5 (for python version 5 binary)
mv python python6 (for python version 6 binary)
then in each of the bash scripts you are calling reference python5 or python6 the correct version
you can also setup an alias in the .bashrc to point to the 'right version'
*friends dont let friends code in python*
Martin
______________________________________________
Note de déni et de confidentialité
> Date: Thu, 28 Apr 2011 15:49:14 +0300
> From: sim@compulab.co.il
> To: shreeseva.learning@gmail.com
> CC: pgsql-general@postgresql.org
> Subject: Re: [GENERAL] plpython module import errors
>
> On 04/28/2011 02:19 PM, c k wrote:
>
> > Hello,
> > I have installed postgresql 9 on fedora 14 having python 2.7. Now
> > created plpythonu language in my database and created a simple
> > function to calculate sum of two variables.
> > while importing math libbrary and executing the function i got the error
> > PL/Python: ImportError: No module named cmath
> >
> > tried to search help for this error on net and tried various things
> > but nothing solved this.
> > What can I do to solve this error.
> > I can still work from python interpreter directly.
> > Thanks in advcance.
> > C P Kulkarni
> This can happen if you have more then one version of python on the
> server and the postgresql is using a different one then you do on the
> command line. This is becuase modules are installed per version of python.
> The easiest way to check this is:
>
> create or replace function pyver() returns text as
> $$
> import sys
> return sys.version
> $$ language 'plpythonu';
>
> select pyver()
> and see if the version it returns is the same one as when you open the
> interpreter.
>
> Sim
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
On Thu, Apr 28, 2011 at 09:15:06AM -0400, Martin Gainty wrote: > mv python python5 (for python version 5 binary) > mv python python6 (for python version 6 binary) Do you happen to mean 2.5 and 2.6 ? Given that, say, our Electronic Medical Record solution happily runs on Python 2.5, 2.6, and 2.7 I wonder what the version problems are that you are referring to ? Wether any Python is a wise choice for use as a procedural language may be another matter. Karsten -- GPG key ID E4071346 @ gpg-keyserver.de E167 67FD A291 2BEA 73BD 4537 78B9 A9F9 E407 1346
Yes, there are three version (now). I am aware of only 2.7 installed by default in /usr/lib directory and 3.2 which I have installed externally. But the function given above shows version 2.6.4. Now the question is how to change the version postresql is calling for function execution? I have also complied the postgresql source using python option, but nothing happens. Is there is variable or like where we can set the python deirectory and version postresql have to use? Because as per manual, after installing 3.2, I have complied source, but still it does not support to python 3.2! Kindly give the details. Thanks and regards, C P Kulkarni On 4/28/11, Karsten Hilbert <Karsten.Hilbert@gmx.net> wrote: > On Thu, Apr 28, 2011 at 09:15:06AM -0400, Martin Gainty wrote: > >> mv python python5 (for python version 5 binary) >> mv python python6 (for python version 6 binary) > > Do you happen to mean 2.5 and 2.6 ? > > Given that, say, our Electronic Medical Record solution > happily runs on Python 2.5, 2.6, and 2.7 I wonder what the > version problems are that you are referring to ? > > Wether any Python is a wise choice for use as a > procedural language may be another matter. > > Karsten > -- > GPG key ID E4071346 @ gpg-keyserver.de > E167 67FD A291 2BEA 73BD 4537 78B9 A9F9 E407 1346 > > -- > Sent via pgsql-general mailing list (pgsql-general@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-general >
On Thursday, April 28, 2011 7:11:50 am c k wrote:
> Yes, there are three version (now). I am aware of only 2.7 installed
> by default in /usr/lib directory and 3.2 which I have installed
> externally. But the function given above shows version 2.6.4.
> Now the question is how to change the version postresql is calling for
> function execution?
> I have also complied the postgresql source using python option, but
> nothing happens. Is there is variable or like where we can set the
> python deirectory and version postresql have to use?
> Because as per manual, after installing 3.2, I have complied source,
> but still it does not support to python 3.2!
It can only compile against one and by default that will be the 'system ' version. To determine what that is , at the system command line enter:
python -V
If you want to compile against 3.2 you will have to tell Postgres that. See here for more detail:
http://www.postgresql.org/docs/9.0/interactive/install-procedure.html
PYTHON
Full path to the Python interpreter. This will be used to determine the dependencies for building PL/Python. Also, whether Python 2 or 3 is specified here (or otherwise implicitly chosen) determines which variant of the PL/Python language becomes available. See Section 42.1 for more information.
> Kindly give the details.
> Thanks and regards,
>
> C P Kulkarni
>
--
Adrian Klaver
adrian.klaver@gmail.com
"['/home/apy/rrun/build/activepython-svn-trunk/build/py2_6_4-linux-x86-apy26-rrun/CoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIx/lib/python26.zip', '/home/apy/rrun/build/activepython-svn-trunk/build/py2_6_4-linux-x86-apy26-rrun/CoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIx/lib/python2.6/', '/home/apy/rrun/build/activepython-svn-trunk/build/py2_6_4-linux-x86-apy26-rrun/CoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIx/lib/python2.6/plat-linux2', '/home/apy/rrun/build/activepython-svn-trunk/build/py2_6_4-linux-x86-apy26-rrun/CoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIx/lib/python2.6/lib-tk', '/home/apy/rrun/build/activepython-svn-trunk/build/py2_6_4-linux-x86-apy26-rrun/CoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIx/lib/python2.6/lib-old', '/home/apy/rrun/build/activepython-svn-trunk/build/py2_6_4-linux-x86-apy26-rrun/CoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIx/lib/lib-dynload']"
what this means? It seems that this path is of the python installation which is used to compile default plpython.so.
If I will compile the source with python 2.7, and change the old plpython.so with new, will my problem solved?
Thanks and regards,
CPKulkarni
On Thursday, April 28, 2011 7:11:50 am c k wrote:
> Yes, there are three version (now). I am aware of only 2.7 installed
> by default in /usr/lib directory and 3.2 which I have installed
> externally. But the function given above shows version 2.6.4.
> Now the question is how to change the version postresql is calling for
> function execution?
> I have also complied the postgresql source using python option, but
> nothing happens. Is there is variable or like where we can set the
> python deirectory and version postresql have to use?
> Because as per manual, after installing 3.2, I have complied source,
> but still it does not support to python 3.2!
It can only compile against one and by default that will be the 'system ' version. To determine what that is , at the system command line enter:
python -V
If you want to compile against 3.2 you will have to tell Postgres that. See here for more detail:
http://www.postgresql.org/docs/9.0/interactive/install-procedure.html
PYTHON
Full path to the Python interpreter. This will be used to determine the dependencies for building PL/Python. Also, whether Python 2 or 3 is specified here (or otherwise implicitly chosen) determines which variant of the PL/Python language becomes available. See Section 42.1 for more information.
> Kindly give the details.
> Thanks and regards,
>
> C P Kulkarni
>
--
Adrian Klaver
Solved.
What I did is complied source with python option (it failed even giving correct python 3.2 as per instruction given in the manual page you have shown) for python 2.7. From build and installed postgresql, copied plpython2.so and plpython.so to the developement server and restarted it. and it get solved.
Thanks to all of you.
Regards,
CPKulkarni
Now, I found that python version postresql is using is 2.6 and path to it is
"['/home/apy/rrun/build/activepython-svn-trunk/build/py2_6_4-linux-x86-apy26-rrun/CoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIx/lib/python26.zip', '/home/apy/rrun/build/activepython-svn-trunk/build/py2_6_4-linux-x86-apy26-rrun/CoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIx/lib/python2.6/', '/home/apy/rrun/build/activepython-svn-trunk/build/py2_6_4-linux-x86-apy26-rrun/CoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIx/lib/python2.6/plat-linux2', '/home/apy/rrun/build/activepython-svn-trunk/build/py2_6_4-linux-x86-apy26-rrun/CoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIx/lib/python2.6/lib-tk', '/home/apy/rrun/build/activepython-svn-trunk/build/py2_6_4-linux-x86-apy26-rrun/CoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIx/lib/python2.6/lib-old', '/home/apy/rrun/build/activepython-svn-trunk/build/py2_6_4-linux-x86-apy26-rrun/CoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIxCoReAcTiVePyThOnPrEfIx/lib/lib-dynload']"
what this means? It seems that this path is of the python installation which is used to compile default plpython.so.
If I will compile the source with python 2.7, and change the old plpython.so with new, will my problem solved?
Thanks and regards,
CPKulkarniOn Thu, Apr 28, 2011 at 7:59 PM, Adrian Klaver <adrian.klaver@gmail.com> wrote:On Thursday, April 28, 2011 7:11:50 am c k wrote:
> Yes, there are three version (now). I am aware of only 2.7 installed
> by default in /usr/lib directory and 3.2 which I have installed
> externally. But the function given above shows version 2.6.4.
> Now the question is how to change the version postresql is calling for
> function execution?
> I have also complied the postgresql source using python option, but
> nothing happens. Is there is variable or like where we can set the
> python deirectory and version postresql have to use?
> Because as per manual, after installing 3.2, I have complied source,
> but still it does not support to python 3.2!
It can only compile against one and by default that will be the 'system ' version. To determine what that is , at the system command line enter:
python -V
If you want to compile against 3.2 you will have to tell Postgres that. See here for more detail:
http://www.postgresql.org/docs/9.0/interactive/install-procedure.html
PYTHON
Full path to the Python interpreter. This will be used to determine the dependencies for building PL/Python. Also, whether Python 2 or 3 is specified here (or otherwise implicitly chosen) determines which variant of the PL/Python language becomes available. See Section 42.1 for more information.
> Kindly give the details.
> Thanks and regards,
>
> C P Kulkarni
>
--
Adrian Klaver