From: Josh S. <str...@gm...> - 2009-03-28 16:32:37
|
If I create a PythonInterpreter and want to add my current location to the classpath to the interpreter? For example, I'm in a package that has a class called Foo and I want to subclass an object in python through the interpreter? in python import org.something.Foo class FooTwo(Foo): ... Thanks, Josh |
From: Josh S. <str...@gm...> - 2009-03-28 17:52:22
|
> sys.path usually includes ".", so you should have > access to the contents of the current directory. > from org.something import Foo > class FooTwo(Foo): > # etc... > -or- > import org > class FooTwo(org.something.Foo): > # etc. Well, that doesn't seem to work. It gets caught up in the import. I'm using a Netbeans Platform App, which I'm not sure makes a difference or not. In my code, I'm in a packages called com.googlecode.nickel.worktools, but when I run the python file with 'import com.googlecode.nickel.worktools.WorkTool', it throws an error on launch saying there is no module 'googlecode'. |
From: Josh S. <str...@gm...> - 2009-03-28 17:55:45
|
7>> sys.path usually includes ".", so you should have >> access to the contents of the current directory. > > >> from org.something import Foo >> class FooTwo(Foo): >> # etc... > >> -or- > >> import org >> class FooTwo(org.something.Foo): >> # etc. > > Well, that doesn't seem to work. It gets caught up in the import. > I'm using a Netbeans Platform App, which I'm not sure makes a > difference or not. In my code, I'm in a packages called > com.googlecode.nickel.worktools, but when I run the python file with > 'import com.googlecode.nickel.worktools.WorkTool', it throws an error > on launch saying there is no module 'googlecode'. > Also, this is what print sys gives me, which may help show what's wrong with my classpath: >System Info: Product Version = nickel 200903060201 Operating System = Linux version 2.6.24-23-generic running on i386 Java; VM; Vendor = 1.6.0_07; Java HotSpot(TM) Server VM 10.0-b23; Sun Microsystems Inc. Runtime = Java(TM) SE Runtime Environment 1.6.0_07-b06 Java Home = /usr/lib/jvm/java-6-sun-1.6.0.07/jre System Locale; Encoding = en_US (nickel); UTF-8 Home Directory = /home/stratton Current Directory = /home/stratton/nickel User Directory = /home/stratton/nickel/build/testuserdir Installation = /home/stratton/nickel/build/cluster /home/stratton/netbeans-6.5.1/platform9 Boot & Ext. Classpath = /usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/resources.jar:/usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/rt.jar:/usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/jsse.jar:/usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/jce.jar:/usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/charsets.jar:/usr/lib/jvm/java-6-sun-1.6.0.07/jre/classes:/usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/ext/dnsns.jar:/usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/ext/localedata.jar:/usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/java-6-sun-1.6.0.07/jre/lib/ext/sunjce_provider.jar Application Classpath = /home/stratton/netbeans-6.5.1/platform9/lib/boot.jar:/home/stratton/netbeans-6.5.1/platform9/lib/org-openide-modules.jar:/home/stratton/netbeans-6.5.1/platform9/lib/org-openide-util.jar:/home/stratton/netbeans-6.5.1/platform9/lib/locale/boot_ja.jar:/home/stratton/netbeans-6.5.1/platform9/lib/locale/boot_pt_BR.jar:/home/stratton/netbeans-6.5.1/platform9/lib/locale/boot_zh_CN.jar:/home/stratton/netbeans-6.5.1/platform9/lib/locale/org-openide-modules_ja.jar:/home/stratton/netbeans-6.5.1/platform9/lib/locale/org-openide-modules_pt_BR.jar:/home/stratton/netbeans-6.5.1/platform9/lib/locale/org-openide-modules_zh_CN.jar:/home/stratton/netbeans-6.5.1/platform9/lib/locale/org-openide-util_ja.jar:/home/stratton/netbeans-6.5.1/platform9/lib/locale/org-openide-util_pt_BR.jar:/home/stratton/netbeans-6.5.1/platform9/lib/locale/org-openide-util_zh_CN.jar:/usr/lib/jvm/java-6-sun-1.6.0.07/lib/dt.jar:/usr/lib/jvm/java-6-sun-1.6.0.07/lib/tools.jar Startup Classpath = /home/stratton/netbeans-6.5.1/platform9/core/core.jar:/home/stratton/netbeans-6.5.1/platform9/core/org-openide-filesystems.jar:/home/stratton/netbeans-6.5.1/platform9/core/locale/core_ja.jar:/home/stratton/netbeans-6.5.1/platform9/core/locale/core_zh_CN.jar:/home/stratton/netbeans-6.5.1/platform9/core/locale/org-openide-filesystems_pt_BR.jar:/home/stratton/netbeans-6.5.1/platform9/core/locale/org-openide-filesystems_zh_CN.jar:/home/stratton/netbeans-6.5.1/platform9/core/locale/core_pt_BR.jar:/home/stratton/netbeans-6.5.1/platform9/core/locale/org-openide-filesystems_ja.jar:/home/stratton/nickel/build/cluster/core/locale/core_nickel.jar ------------------------------------------------------------------------------- |
From: Josh S. <str...@gm...> - 2009-03-29 03:08:47
|
Following Jeff's advice I got my problem fixed. Just to followup for future reference, I was working on a netbeans platform app and couldn't load my classes in the python code. This was solved by changing my python code: import the_name_of_my_package to: sys.add_package('the_name_of_my_package') import the_name_of_my_package and by specifying the class loader when instantiating a PythonInterpreter. From what I've read, each netbeans modules has its own class loader, so when creating my PythonInterpreter code from: PythonInterpreter interp = new PythonInterpreter(); to: PySystemState sys = new PySystemState(); sys.setClassLoader(getClass().getClassLoader()); PythonInterpreter interp = new PythonInterpreter(null, sys); I also added System.setProperty("python.verbose", "debug"); but this wasn't really required as the steps before solved the class loading issues. Thanks for the help, Jeff >> NetBeans platform uses a custom classloader, you may need to set >> that on sys, too. >> > > Inside python? Is there another sys call for this? Is there > documentation for this somewhere? The Jython User's Guide only covers > the bare essentials. > > I should have type "If NetBeans uses a custom classloader...". I don't know whether it does. You can do something like this to create your (first) interpreter: PySystemState sys = new PySystemState(); sys.setClassLoader(theNetBeansClassloader); new PythonInterpreter(null,sys); I don't think there is good documentation for advanced features like.this. I learned it from reading the source code. >> You can set the system property python.verbose=debug >> to tell Jython to print detailed information about imports. >> > > Just make a new JVM attribute in Java before making the interpreter? > Yes, call System.setProperty("python.verbose","debug") before calling any org.python.* code. |