[pylucene-dev] finding the JVM DLL on Windows...

Bill Janssen janssen at parc.com
Fri Apr 25 16:20:40 PDT 2008


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.

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,])






More information about the pylucene-dev mailing list