dependency problem with jythonc

Juu kexx at iname.com
Sun Apr 8 01:09:55 EDT 2001


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".

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). Nevertheless, that still seems to fail
"plain" modules that just have "functions" inside, with no classes (will
check once again on that).


Any comments will be very appreciated.


Best regards,
Juris.

P.S. I'm using Jython 2.1a1 and Sun's JDK 1.3.






More information about the Python-list mailing list