On Fri, 25 Apr 2008, Bill Janssen wrote:

I'd like to reopen an issue we talked about earlier.

I'm having difficulties running PyLucene 2.4.0 (JCC 1.9, shared) on
Windows XP.  I've put the "jcc.dll" file into the
PYTHON/Lib/site-packages/lucene/ directory, which seems to work, but
it's complaining that "The application has failed to start because
jvm.dll was not found."

I think that this is going to be a persistent problem on Windows.
Even though I have the Java "bin" directory on my path, the jvm.dll is
in "bin/client", and so is not found.

What I'd like to do is to have the following prologue inserted into
the lucene/__init__.py file.  It adds the registry's current location
for jvm.dll to the end of the Path environment variable.  This means
that a location explicitly specified by the user will override this
default value, but it also means that a location for the dll will
always be found, and reduce what I expect to be one of the most
troublesome errors using JCC PyLucene on Windows.

Yes, you have shown that this is possible before. I've also said before that I'm a little unsure about putting this stuff in for everyone as I'm very suspicious of registry-based hacks. What works for your setup may not work for everyone else's setup. Others may then have very strange errors because there is some 'well hidden' kludge in an __init__.py file messing with people's PATH.

To me, messing with people's PATHs behind their backs very much sounds like a no-no. Alarm bells go off. If it works for your setup, though, I don't see any problem with you having this code in a piece of python that runs _before_ the lucene module is imported. And it would appear to solve the problem for your setup very well then.

Or am I missing something ?

Are there any actual Windows users (I'm not) on this list (besides Bill) who have an opinion about this ?

Andi..


Bill
---------------------------------------------------------------

import sys
if sys.platform == 'win32':

   # figure out where the jvm.dll is, and make sure that location is on sys.path
   import _winreg as wreg
   registry = wreg.ConnectRegistry(None, wreg.HKEY_LOCAL_MACHINE)
   key = wreg.OpenKey(registry, r"SOFTWARE\JavaSoft\Java Runtime Environment")
   v, t = wreg.QueryValueEx(key, "CurrentVersion")
   key = wreg.OpenKey(registry, r"SOFTWARE\JavaSoft\Java Runtime 
Environment\%s" % v)
   javahome, t = wreg.QueryValueEx(key, "JavaHome")
   registry.Close()
   # if we have a javahome, make sure it's on the list
   if javahome:
       import os
       location = os.path.join(javahome, "bin", "client")
       os.environ['Path'] = 
os.pathsep.join(os.environ['Path'].split(os.pathsep) + [location,])




_______________________________________________
pylucene-dev mailing list
pylucene-dev@osafoundation.org
http://lists.osafoundation.org/mailman/listinfo/pylucene-dev

_______________________________________________
pylucene-dev mailing list
pylucene-dev@osafoundation.org
http://lists.osafoundation.org/mailman/listinfo/pylucene-dev

Reply via email to