Подтвердить что ты не робот

Как установить сторонний модуль для postgres pl/python?

Мне нужно импортировать сторонний модуль внутри моей функции pl/python. Кажется, pl/python использует внутренний питон, который не имеет сторонних модулей.

Я получаю такую ​​ошибку:

ERROR:  PL/Python: PL/Python function "to_tsvector_luc" failed
DETAIL:  <type 'exceptions.ImportError'>: No module named lucene

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

ERROR: PL/Python: PL/Python function "to_tsvector_luc" failed
SQL state: XX000
Detail: <type 'exceptions.ImportError'>: No module named lucene

Как установить модуль в pl/python, чтобы я мог импортировать его из моего кода хранимой процедуры?

4b9b3361

Ответ 1

pl/python имеет доступ ко всем модулям, которые должен иметь обычный интерпретатор Python, если они находятся в $PYTHONPATH на сервере (и пользователь, который запускает службу postgres). Работает ли import lucene, если вы запустили его в интерпретаторе Python на сервере?

Если ваш модуль установлен где-то в другом месте (например, не dist-packages и т.д.), вам нужно будет отредактировать файл /etc/postgresql/9.1/main/environment (настроить на версию PostgreSQL) на сервере и добавить что-то вроде PYTHONPATH='<path to your module>'.

Ответ 2

Поскольку для модификации PYTHONPATH пользователя postgres, скорее всего, потребуется перезагрузка сервера, несколько проще добавить путь из Python через

from sys import path
path.append( '/path/to/your/module' )

Ответ 3

Для меня это было о знании, какая версия Python Postgres была  смотреть и затем устанавливать в каталог /local/lib и НЕ  Каталог .local, который не распознается в Postgres.

В Postgres, создал эту функцию, чтобы определить версию Python  использовал: .

CREATE OR REPLACE FUNCTION python_version()
    RETURNS pg_catalog.text AS $BODY$

    import sys
    plpy.info(sys.version)    
    return 'finish'
   BODY$
LANGUAGE plpython3u VOLATILE SECURITY DEFINER

Выполните функцию, используя следующее:

select python_version()

В Python:

import sys
sys.version

И сценарий, и Python сказали: ИНФОРМАЦИЯ: 3.7.3 (по умолчанию, 20 августа 2019 г., 17:04:43)

pip3 install поместил библиотеку в этот каталог: /home/username/.local/lib/python3.7/site-packages

Сделать пакет доступным для ВСЕХ пользователей (включая Postgres). Я использовал Umask:

sudo su
cd ~
umask 022
pip3 install <package name>

ПРИМЕЧАНИЕ. Пакет устанавливается в: /usr/local/lib # cd python3.7/dist-packages Не в /USR/Lib/python3/ Расс-пакеты #