From: Kexx <ke...@in...> - 2001-04-07 17:09:38
|
Hello, I was trying to freeze (actually web/servlet-ize, but that's besides the = point) my Jython application, and failed - I must be doing something = totally wrong. :-(. Here's a short failure scenario: -- module Main.py in root/current package -- # commented -- from amod.A import A from bmod.B import B B().bfunc() -- end Main.py -- -- module A.py in package/directory apkg -- class A: def afunc(self): return "kermits" -- end A.py -- -- module B.py in package/directory bpkg -- from apkg.A import A class B: def bfunc(self): print A().afunc() -- end B.py -- I also have 2 empty __init__.py files (one for apkg, the other for = bpkg). Now, "jython Main.py" works just fine ("kermits" is printed). Here's the output from "jythonc --deep" at compile time: -- start -- E:\projects\jytest\2>jythonc --deep Main.py processing Main processing bpkg.B processing apkg.A processing bpkg.__init__ Required packages: Creating adapters: Creating .java files: B module Main module __init__ module A module Compiling .java to .class... Compiling with args: ['E:\\programming\\java\\jdk1.3\\bin\\javac.exe', = '-classpa th', '"E:\\programming\\jython\\jython.jar;E:\\program = files\\borland\\Interclie nt\\interclient.jar;E:\\programming\\jython\\jython.jar;E:\\programming\\= java\\j 2sdkee1.3\\lib\\j2ee.jar;E:\\programming\\java\\jakarta-tomcat-3.2.1\\jyt= est\\WE B-INF\\classes;.;.\\jpywork;;E:\\programming\\jython\\Tools\\jythonc;E:\\= project s\\jytest\\2\\.;E:\\programming\\jython\\Lib;e:\\programming\\Jython\\Lib= ;E:\\pr ogramming\\jython"', '.\\jpywork\\bpkg\\B.java', = '.\\jpywork\\Main.java', '.\\jp ywork\\bpkg\\__init__.java', '.\\jpywork\\apkg\\A.java'] 0 Note: Some input files use or override a deprecated API. Note: Recompile with -deprecation for details. -- end -- Next, we go to "./jpywork" and do a "java Main" and get: -- start -- Java Traceback: at org.python.core.Py.ImportError(Py.java:180) at org.python.core.imp.load(imp.java:384) at org.python.core.imp.load(imp.java:392) at org.python.core.imp.importName(imp.java:448) at org.python.core.imp.importName(imp.java:528) at org.python.core.ImportFunction.load(__builtin__.java:989) at org.python.core.ImportFunction.__call__(__builtin__.java:982) at org.python.core.PyObject.__call__(PyObject.java:252) at org.python.core.__builtin__.__import__(__builtin__.java:942) at org.python.core.imp.importFromAs(imp.java:586) at bpkg.B$_PyInner.main$3(B.java:54) at bpkg.B$_PyInner.call_function(B.java:36) at org.python.core.PyTableCode.call(PyTableCode.java:198) at org.python.core.PyCode.call(PyCode.java:13) at org.python.core.imp.createFromCode(imp.java:165) at org.python.core.imp.createFromClass(imp.java:186) at org.python.core.imp.loadPrecompiled(imp.java:258) at org.python.core.imp.loadFromPath(imp.java:269) at org.python.core.PyModule.impAttr(PyModule.java:39) at org.python.core.imp.dottedFind(imp.java:428) at org.python.core.imp.importName(imp.java:452) at org.python.core.imp.importName(imp.java:528) at org.python.core.ImportFunction.load(__builtin__.java:989) at org.python.core.ImportFunction.__call__(__builtin__.java:982) at org.python.core.PyObject.__call__(PyObject.java:252) at org.python.core.__builtin__.__import__(__builtin__.java:942) at org.python.core.imp.importFromAs(imp.java:586) at Main$_PyInner.main$1(Main.java:34) at Main$_PyInner.call_function(Main.java:26) at org.python.core.PyTableCode.call(PyTableCode.java:198) at org.python.core.PyCode.call(PyCode.java:13) at org.python.core.imp.createFromCode(imp.java:165) at org.python.core.Py.runMain(Py.java:818) at Main.main(Main.java:49) Traceback (innermost last): File "E:\projects\jytest\2\Main.py", line 0, in main File "E:\projects\jytest\2\bpkg\B.py", line 0, in main ImportError: no module named apkg -- end -- Taking a look at the ./jpywork directory shows that __init__-s (.java, = .class and $_PyInner.class) have only been compiled for bpkg, but not = for apkg. I tried passing it multiple arguments to compile, but it then compiled = it to a different "package level". =20 Now, if we uncomment the first line in Main.py to also "from apkg.A = import A" it works just fine (but importing all modules from the main = application seems an ugly hack). Any comments will be very appreciated. Best regards, Juris. P.S. I hope this is on-topic for this list, since it _might_ be a = jythonc bug. If not - let me know and forgive me this time :-). |