On Nov 8, 2011, at 0:08, Jiang Fung Wong <jiangfung.w...@jamiq.com> wrote:
> I have added the directory containing jcc.dll, which is the jcc egg, > to PATH. It is not necessary, because the code in jcc\__init__.py > automatically adds the directory to PATH. Anyway I have added it, and > the result is the same. Then it could be that a DLL that _jcc.dll depends on was not found or could not otherwise be loaded. Is there a Java VM embedded in the Postgres process ? If so, is it the same that was used to build PyLucene ? Andi.. > > I couldn't not import lucene module, so there is way to run initVM(). > > I can run pyLucene in Python 2.6.4, and the postgres' python is also 2.6.4 > > On Tue, Nov 8, 2011 at 2:57 PM, Andi Vajda <va...@apache.org> wrote: >> >> On Nov 7, 2011, at 22:28, Jiang Fung Wong <jiangfung.w...@jamiq.com> wrote: >> >>> Dear All, >>> >>> I got this error when trying to import pylucene inside Postgres PL/Python. >>> >>> ERROR: ('Traceback (most recent call last): >>> File "<string>", line 17, in __plpython_procedure_testing_1517611 >>> File >>> "d:\\ve\\Lib\\site-packages\\lucene-3.4.0-py2.6-win32.egg\\lucene\\__init__.py", >>> line 5, in <module> >>> import jcc, _lucene >>> File >>> "d:\\ve\\Lib\\site-packages\\jcc-2.11-py2.6-win32.egg\\jcc\\__init__.py", >>> line 34, in <module> >>> from _jcc import initVM >>> ImportError: DLL load failed: The specified module could not be found. >>> ',) >>> >>> I have no isue importing jvm.dll using ctypes, >>> ctypes.windll.LoadLibrary("jvm") >>> The path to jvm.dll is also listed on the PATH environment variable, >>> from the output of the statement plpy.info(os.environ['Path']) below. >>> I have no problem importing pylucene on my system's python >>> interpretor, outside Postgres. >>> >>> How to solve this? >> >> You probably need to set some PATH environment variable to contain the >> directory that contains the _jcc.dll for the process Postgres is running in. >> A Postgres windows user mailing list may have more details for you. >> Don't forget that you also must run initVM() from the process' main thread >> and that each thread calling into PyLucene must call attachCurrentThread() >> too. >> >> Last but not least, is the version of Python embedded in Postgres the same >> as the one you used to build PyLucene ? >> >> Andi.. >> >>> >>> Here's my code: >>> >>> drop function testing(); >>> CREATE FUNCTION testing() >>> RETURNS text >>> AS $$ >>> >>> import os >>> import ctypes >>> ctypes.windll.LoadLibrary("jvm") >>> plpy.info(os.environ['Path']) >>> >>> try: >>> import lucene >>> except Exception, e: >>> import traceback >>> plpy.error(traceback.format_exc()) >>> else: >>> return "" >>> >>> $$ LANGUAGE plpythonu; >>