Обсуждение: Changing Pl/Python default interpreter
Hi,
I'm running PostgreSQL 10.6 (Ubuntu 10.6-0ubuntu0.18.10.1) with Pl/Python. Everything is working fine but I would like to change the default interpreter used by Pl/Python (without recompiling Postgre from scratch). The docs say that if the PYTHON environment variable wasn't set during compilation, Pl/Python use any version it found. I wrote a small script and I found which interpreter Pl/Python is using by default. Now I would like to modify the symlink it uses to run Python -- I'm just assuming it's a symlink but maybe I'm wrong. The problem is that I tried to modify all python executables in /usr/bin but it didn't change Pl/Python default behavior. Does anyone know where I can find which file Pl/Python use to run Python? Is there a better approach to change the default interpreter?
Many thanks,
Colin
Colin Brisson <colibrisson@gmail.com> writes: > I'm running PostgreSQL 10.6 (Ubuntu 10.6-0ubuntu0.18.10.1) with Pl/Python. > Everything is working fine but I would like to change the default > interpreter used by Pl/Python (without recompiling Postgre from scratch). > The docs say that if the PYTHON environment variable wasn't set during > compilation, Pl/Python use any version it found. I wrote a small script and > I found which interpreter Pl/Python is using by default. Now I would like > to modify the symlink it uses to run Python -- I'm just assuming it's a > symlink but maybe I'm wrong. The problem is that I tried to modify all > python executables in /usr/bin but it didn't change Pl/Python default > behavior. Does anyone know where I can find which file Pl/Python use to run > Python? Is there a better approach to change the default interpreter? plpython loads the relevant libpython.so, it doesn't invoke the "python" executable. I do not think you can get it to use a different-version libpython without recompiling. It will *certainly* not work to sub in python 3.x for python 2.x or vice versa without a recompile, if that's what you were hoping for, because some of the library APIs changed. regards, tom lane
Hi Tom,
Thank you for your answer. Postgre's Ubuntu package is great, both Python 2 and 3 are supported out of the box. However, I would like to use virtual environments instead of global install.
I have found a couple of solutions but none of them are really satisfactory:
- Recompile Postgre from source with the PYTHON variable pointing to anaconda.
- Activate virtualenv inside the default interpreter by using activate_this.py (https://gist.github.com/dmckeone/69334e2d8b27f586414a).
- Set PYTHONPATH inside Postgre environment file (not compatible with Anaconda).
Regards,
Colin
On Sat, Dec 15, 2018 at 9:52 AM Colin Brisson <colibrisson@gmail.com> wrote:
Hi Tom,Thank you for your answer. Postgre's Ubuntu package is great, both Python 2 and 3 are supported out of the box. However, I would like to use virtual environments instead of global install.I have found a couple of solutions but none of them are really satisfactory:
- Recompile Postgre from source with the PYTHON variable pointing to anaconda.
- Activate virtualenv inside the default interpreter by using activate_this.py (https://gist.github.com/dmckeone/69334e2d8b27f586414a).
- Set PYTHONPATH inside Postgre environment file (not compatible with Anaconda).
Regards,ColinOn Fri, Dec 14, 2018 at 9:42 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:Colin Brisson <colibrisson@gmail.com> writes:
> I'm running PostgreSQL 10.6 (Ubuntu 10.6-0ubuntu0.18.10.1) with Pl/Python.
> Everything is working fine but I would like to change the default
> interpreter used by Pl/Python (without recompiling Postgre from scratch).
> The docs say that if the PYTHON environment variable wasn't set during
> compilation, Pl/Python use any version it found. I wrote a small script and
> I found which interpreter Pl/Python is using by default. Now I would like
> to modify the symlink it uses to run Python -- I'm just assuming it's a
> symlink but maybe I'm wrong. The problem is that I tried to modify all
> python executables in /usr/bin but it didn't change Pl/Python default
> behavior. Does anyone know where I can find which file Pl/Python use to run
> Python? Is there a better approach to change the default interpreter?
plpython loads the relevant libpython.so, it doesn't invoke the "python"
executable. I do not think you can get it to use a different-version
libpython without recompiling. It will *certainly* not work to sub in
python 3.x for python 2.x or vice versa without a recompile, if that's
what you were hoping for, because some of the library APIs changed.
regards, tom lane