2011-11-07 20 views
13

Potrzebuję zaimportować moduł innej firmy do mojej funkcji pl/python. Wygląda na to, że pl/python używa wewnętrznego pythona, który nie ma żadnych modułów zewnętrznych.Jak zainstalować moduł strony trzeciej dla postgres pl/python?

uzyskać tego rodzaju błędu:

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 

Jak zainstalować moduł do pl/python, tak że mogę zaimportować go od wewnątrz mojego kodu procedury przechowywanej?

Odpowiedz

17

pl/python ma dostęp do wszystkich modułów, które normalny interpreter Pythona będzie miał tak długo, jak są one w $PYTHONPATH na serwerze (i użytkownika, który uruchamia usługę postgres). Czy działa import lucene, jeśli uruchomisz go w interpretera Pythona na serwerze?

Jeśli twój moduł jest zainstalowany gdzieś indziej (na przykład nie pakiety dist itp.), To musisz edytować plik /etc/postgresql/9.1/main/environment (dostosować do swojej wersji PostgreSQL) na serwerze i dodać coś w rodzaju PYTHONPATH='<path to your module>'.

+0

'/ etc/PostgreSQL/9.1/main/environment' pojawia się tylko do być rzeczą na Ubuntu, zobacz [tutaj] (https://stackoverflow.com/questions/9595683/postgresql-environment-file-on-mac-osx) – bcattle

11

Od modyfikując PYTHONPATH od postgres użytkownik będzie prawdopodobnie potrzebny jest restart serwera, jest to nieco łatwiejsze, aby dodać ścieżkę od wewnątrz Python, poprzez

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

To powinna być zaakceptowana odpowiedź –

Powiązane problemy