From: Kai H. <kai...@gm...> - 2010-02-24 05:02:41
|
Hi there, I would like to call jython from inside another java class. I would like to avoid to create an external process that calls jython.bat which starts another java vm and so on. and I would like to use an embedded jython.jar to avoid the requirement for an locally installed jython. I have already a jar file ready that contains my module and a __run__.py file to start it using the -jar option of the jython class. But this module tries to import 'os' which seems not yet available: _No module named os_ So I understand that I need to have the Lib folder of jython available somehow. I would like to have all required files in another jar that I add to my classpath (or if that works to the classloader) but I need more knowledge about the file structure that is required (does that jar file have a /Lib folder for the contents or is it only requiring the contents of the /Lib folder?). I have already tried some variations. Which way is the right one? Cheers, Kai |
From: Alex G. <ale...@ne...> - 2010-02-24 09:26:39
|
24.2.2010 7:02, Kai Hackemesser kirjoitti: > Hi there, > > I would like to call jython from inside another java class. I would > like to avoid to create an external process that calls jython.bat > which starts another java vm and so on. and I would like to use an > embedded jython.jar to avoid the requirement for an locally installed > jython. > > I have already a jar file ready that contains my module and a > __run__.py file to start it using the -jar option of the jython class. > But this module tries to import 'os' which seems not yet available: > > _No module named os_ > > So I understand that I need to have the Lib folder of jython available > somehow. I would like to have all required files in another jar that I > add to my classpath (or if that works to the classloader) but I need > more knowledge about the file structure that is required (does that > jar file have a /Lib folder for the contents or is it only requiring > the contents of the /Lib folder?). I have already tried some > variations. Which way is the right one? Just choose the standalone install from the installer and you'll get a jar file that has the standard library included. > > Cheers, > Kai > > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > > > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > |
From: Alex G. <ale...@ne...> - 2010-02-24 20:49:56
|
24.2.2010 22:45, Kai Hackemesser kirjoitti: > I tried that, and it helped. With the standalone jar it processes the > os import, but it still has import issues: > > ImportError: No module named random > > What is missing now and why? Since I know nothing of your deployment environment, I'll just have to guess. Try importing other modules and see if other parts of the standard library are importable. And tell us more about how you're using Jython in this environment. > > > 2010/2/24 Alex Grönholm <ale...@ne... > <mailto:ale...@ne...>> > > 24.2.2010 7:02, Kai Hackemesser kirjoitti: > > Just choose the standalone install from the installer and you'll > get a jar file that has the standard library included. > > |
From: Alex G. <ale...@ne...> - 2010-02-24 22:42:09
|
24.2.2010 23:14, Kai Hackemesser kirjoitti: > Ok, more details here: > > I'm developing a Maven plugin to call the robot framework jybot as a > goal. (Robot framework see here: http://robotframework.googlecode.com) > My project adds the jython.jar (now standalone) as a dependency. I > have created another jar that holds the robot framework module + the > selenium library module and I call jython.run with the "-jar" arg > pointing to the module. the __run__ class successfully finds the robot > module and starts to process it. Then while initialisation this happens: > > Traceback (most recent call last): > File "__run__", line 308, in <module> > File "__pyclasspath__/robot/__init__.py", line 24, in <module> > File "__pyclasspath__/robot/output/__init__$py.class", line 16, in > <module> > File "__pyclasspath__/robot/output/output$py.class", line 18, in > <module> > File "__pyclasspath__/robot/common/__init__$py.class", line 16, in > <module> > File "__pyclasspath__/robot/common/model$py.class", line 16, in <module> > ImportError: No module named random > > Before I switched to the standalone jar, it already failed to find the > os module. See if other stdlib modules can be imported. This problem is beyond me. Also, please reply to the mailing list, not to me personally. > > If you need more details, please ask. > > Cheers, > Kai > > > 2010/2/25 Alex Grönholm <ale...@ne... > <mailto:ale...@ne...>> > > 24.2.2010 22:45, Kai Hackemesser kirjoitti: >> I tried that, and it helped. With the standalone jar it processes >> the os import, but it still has import issues: >> >> ImportError: No module named random >> >> What is missing now and why? > Since I know nothing of your deployment environment, I'll just > have to guess. Try importing other modules and see if other parts > of the standard library are importable. And tell us more about how > you're using Jython in this environment. > >> >> >> 2010/2/24 Alex Grönholm <ale...@ne... >> <mailto:ale...@ne...>> >> >> 24.2.2010 7:02, Kai Hackemesser kirjoitti: >> >> Just choose the standalone install from the installer and >> you'll get a jar file that has the standard library included. >> >> |
From: Frank W. <fwi...@gm...> - 2010-02-25 02:36:17
|
2010/2/24 Alex Grönholm <ale...@ne...>: > See if other stdlib modules can be imported. This problem is beyond me. > Also, please reply to the mailing list, not to me personally. Hi Kai, It is necessary on this list to "reply to all" for it to get to the main list (historical reasons). Since you mention a __run__ I'm assuming you are following directions like this one: http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts Or this one: http://stackoverflow.com/questions/1252965/distributing-my-python-scripts-as-jars-with-jython/1255113#1255113 The stackoverflow example mentions a class that is new as of Jython 2.5.1: JarRunner. If you haven't tried using JarRunner that might be a good place to start if you are jarring apps together, at least that's what it sounds like you are doing. If not please do tell us more about your setup. -Frank |
From: Kai H. <kai...@gm...> - 2010-02-25 03:28:47
|
2010/2/25 Frank Wierzbicki <fwi...@gm...> > 2010/2/24 Alex Grönholm <ale...@ne...>: > > See if other stdlib modules can be imported. This problem is beyond me. > > Also, please reply to the mailing list, not to me personally. > Hi Kai, > > It is necessary on this list to "reply to all" for it to get to the > main list (historical reasons). > > Sorry for the email confusion, sometimes gmail does it right, sometimes not. (I think that depends on the mailing list settings that could inject an "answer to" header to the mails...) > Since you mention a __run__ I'm assuming you are following directions > like this one: > > http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts > > Or this one: > > > http://stackoverflow.com/questions/1252965/distributing-my-python-scripts-as-jars-with-jython/1255113#1255113 > > The stackoverflow example mentions a class that is new as of Jython > 2.5.1: JarRunner. If you haven't tried using JarRunner that might be > a good place to start if you are jarring apps together, at least > that's what it sounds like you are doing. If not please do tell us > more about your setup. > > That's true, but I prefer not to have a single customised jython-standalone-app, but a one jar for plain jython-standalone and one for the additional modules required here. I will test with the JarRunner now. I suppose I have to have both jars then in the classpath, right? a -jar option is then not longer required. Is it enough to have a custom URLClassloader being aware of the jars wenn calling the JarRunner? After all my target is still to not need to fork the process. Cheers, Kai |
From: Kai H. <kai...@gm...> - 2010-02-25 04:04:09
|
Ok, I now set up my code like following: <code> URL robotURL = robotJar.toURI().toURL(); URL jythonURL = jythonJar.toURI().toURL(); ClassLoader currentClassLoder = Thread.currentThread().getContextClassLoader(); URLClassLoader jythonAwareClassLoader = new URLClassLoader(new URL[]{ robotURL, jythonURL }, currentClassLoder); Thread.currentThread().setContextClassLoader(jythonAwareClassLoader); try { JarRunner.run(commandLine); } finally { Thread.currentThread().setContextClassLoader(currentClassLoder); } </code> This results in jython JarRunner starting the __run__, which finds and starts to initialize the module robot, which then fails: [INFO] Trace Traceback (most recent call last): File "__pyclasspath__/__run__.py", line 308, in <module> File "__pyclasspath__/robot/__init__.py", line 24, in <module> File "__pyclasspath__/robot/output/__init__$py.class", line 16, in <module> File "__pyclasspath__/robot/output/output$py.class", line 18, in <module> File "__pyclasspath__/robot/common/__init__$py.class", line 16, in <module> File "__pyclasspath__/robot/common/model$py.class", line 16, in <module> ImportError: No module named random As this is not working maybe the classloader idea was wrong and I need to modify the classpath property instead? Does that work within the same thread? Cheers, Kai 2010/2/25 Kai Hackemesser <kai...@gm...> > 2010/2/25 Frank Wierzbicki <fwi...@gm...> > > 2010/2/24 Alex Grönholm <ale...@ne...>: >> > See if other stdlib modules can be imported. This problem is beyond me. >> > Also, please reply to the mailing list, not to me personally. >> Hi Kai, >> >> It is necessary on this list to "reply to all" for it to get to the >> main list (historical reasons). >> >> > Sorry for the email confusion, sometimes gmail does it right, sometimes > not. (I think that depends on the mailing list settings that could inject an > "answer to" header to the mails...) > > > >> Since you mention a __run__ I'm assuming you are following directions >> like this one: >> >> http://wiki.python.org/jython/JythonFaq/DistributingJythonScripts >> >> Or this one: >> >> >> http://stackoverflow.com/questions/1252965/distributing-my-python-scripts-as-jars-with-jython/1255113#1255113 >> >> The stackoverflow example mentions a class that is new as of Jython >> 2.5.1: JarRunner. If you haven't tried using JarRunner that might be >> a good place to start if you are jarring apps together, at least >> that's what it sounds like you are doing. If not please do tell us >> more about your setup. >> >> > That's true, but I prefer not to have a single customised > jython-standalone-app, but a one jar for plain jython-standalone and one for > the additional modules required here. > > I will test with the JarRunner now. I suppose I have to have both jars then > in the classpath, right? a -jar option is then not longer required. > > Is it enough to have a custom URLClassloader being aware of the jars wenn > calling the JarRunner? After all my target is still to not need to fork the > process. > > Cheers, > Kai > |
From: Frank W. <fwi...@gm...> - 2010-02-25 13:57:11
|
On Wed, Feb 24, 2010 at 11:04 PM, Kai Hackemesser <kai...@gm...> wrote: > URL robotURL = robotJar.toURI().toURL(); What are the contents of robotJar? I think that Jython's normal classloader isn't kicking in and the Lib/ directory isn't being found, but it will help if I can give it a try locally. -Frank |
From: Kai H. <kai...@gm...> - 2010-02-25 21:05:27
|
Hi, The content of the robotJar jar looks like: \-robot \-SeleniumLibrary - __run__.py where robot and SeleniumLibrary are python module folders normally found unter Lib/site-packages (the robot framework I mentioned earlier) The module is detected correctly, but the imported Lib module 'random' is not found (but the imported 'os' module was found before): Traceback (most recent call last): File "__pyclasspath__/__run__.py", line 308, in <module> File "__pyclasspath__/robot/__init__.py", line 24, in <module> File "__pyclasspath__/robot/output/__init__$py.class", line 16, in <module> File "__pyclasspath__/robot/output/output$py.class", line 18, in <module> File "__pyclasspath__/robot/common/__init__$py.class", line 16, in <module> File "__pyclasspath__/robot/common/model$py.class", line 16, in <module> ImportError: No module named random Cheers, Kai 2010/2/26 Frank Wierzbicki <fwi...@gm...> > On Wed, Feb 24, 2010 at 11:04 PM, Kai Hackemesser > <kai...@gm...> wrote: > > > URL robotURL = robotJar.toURI().toURL(); > What are the contents of robotJar? I think that Jython's normal > classloader isn't kicking in and the Lib/ directory isn't being found, > but it will help if I can give it a try locally. > > -Frank > |
From: Kai H. <kai...@gm...> - 2010-03-03 22:13:56
|
I haven't got any input on that issue in the last days, any help appreciated... Cheers, Kai 2010/2/26 Kai Hackemesser <kai...@gm...> > Hi, > > The content of the robotJar jar looks like: > > \-robot > \-SeleniumLibrary > - __run__.py > > where robot and SeleniumLibrary are python module folders normally found > unter Lib/site-packages (the robot framework I mentioned earlier) > > The module is detected correctly, but the imported Lib module 'random' is > not found (but the imported 'os' module was found before): > > > Traceback (most recent call last): > File "__pyclasspath__/__run__.py", line 308, in <module> > File "__pyclasspath__/robot/__init__.py", line 24, in <module> > File "__pyclasspath__/robot/output/__init__$py.class", line 16, in > <module> > File "__pyclasspath__/robot/output/output$py.class", line 18, in <module> > File "__pyclasspath__/robot/common/__init__$py.class", line 16, in > <module> > File "__pyclasspath__/robot/common/model$py.class", line 16, in <module> > ImportError: No module named random > > Cheers, > Kai > > 2010/2/26 Frank Wierzbicki <fwi...@gm...> > > On Wed, Feb 24, 2010 at 11:04 PM, Kai Hackemesser >> <kai...@gm...> wrote: >> >> > URL robotURL = robotJar.toURI().toURL(); >> What are the contents of robotJar? I think that Jython's normal >> classloader isn't kicking in and the Lib/ directory isn't being found, >> but it will help if I can give it a try locally. >> >> -Frank >> > > |
From: Kai H. <kai...@gm...> - 2010-03-07 21:47:31
|
I debugged a bit in the meantime on this issue. For reference see the source code at http://code.google.com/p/robotframework/source/browse/#svn/trunk/src/robot that 'robot' module has a module 'common' which has the file model.py: http://code.google.com/p/robotframework/source/browse/trunk/src/robot/common/model.py this has an import statement at line 16: import random The classloader is then asked to to resolve "robot/common/random/__init__$py.class", followed by "robot/common/random/__init__.py", "robot/common/random$py.class" and "robot/common/random.py" The URL class loader is not asked for "Lib/random.py" or it's $py.class file. which would match with the one in the jython standalone file (I have tested finding it with this string). Is this a bug in the Jython resolver or should I tell the people from the robotframework to use a different way to import it? (If the is one - my python knowledge is not much better than my knowledge of the Human Genome Project - I know it exists and what they try to do.) Cheers, Kai 2010/3/4 Kai Hackemesser <kai...@gm...> > I haven't got any input on that issue in the last days, any help > appreciated... > > Cheers, > Kai > > 2010/2/26 Kai Hackemesser <kai...@gm...> > > Hi, >> >> The content of the robotJar jar looks like: >> >> \-robot >> \-SeleniumLibrary >> - __run__.py >> >> where robot and SeleniumLibrary are python module folders normally found >> unter Lib/site-packages (the robot framework I mentioned earlier) >> >> The module is detected correctly, but the imported Lib module 'random' is >> not found (but the imported 'os' module was found before): >> >> >> Traceback (most recent call last): >> File "__pyclasspath__/__run__.py", line 308, in <module> >> File "__pyclasspath__/robot/__init__.py", line 24, in <module> >> File "__pyclasspath__/robot/output/__init__$py.class", line 16, in >> <module> >> File "__pyclasspath__/robot/output/output$py.class", line 18, in >> <module> >> File "__pyclasspath__/robot/common/__init__$py.class", line 16, in >> <module> >> File "__pyclasspath__/robot/common/model$py.class", line 16, in <module> >> ImportError: No module named random >> >> Cheers, >> Kai >> >> 2010/2/26 Frank Wierzbicki <fwi...@gm...> >> >> On Wed, Feb 24, 2010 at 11:04 PM, Kai Hackemesser >>> <kai...@gm...> wrote: >>> >>> > URL robotURL = robotJar.toURI().toURL(); >>> What are the contents of robotJar? I think that Jython's normal >>> classloader isn't kicking in and the Lib/ directory isn't being found, >>> but it will help if I can give it a try locally. >>> >>> -Frank >>> >> >> > |
From: Pekka K. <pe...@ik...> - 2010-03-15 08:10:09
|
[Resending because I first used wrong sending address and the email was blocked.] 2010/3/7 Kai Hackemesser <kai...@gm...>: > I debugged a bit in the meantime on this issue. > > For reference see the source code at > http://code.google.com/p/robotframework/source/browse/#svn/trunk/src/robot > > that 'robot' module has a module 'common' which has the file model.py: > > http://code.google.com/p/robotframework/source/browse/trunk/src/robot/common/model.py > > this has an import statement at line 16: > > import random > > The classloader is then asked to to resolve > "robot/common/random/__init__$py.class", followed by > "robot/common/random/__init__.py", "robot/common/random$py.class" and > "robot/common/random.py" > > The URL class loader is not asked for "Lib/random.py" or it's $py.class > file. which would match with the one in the jython standalone file (I have > tested finding it with this string). Is this a bug in the Jython resolver or > should I tell the people from the robotframework to use a different way to > import it? (If the is one - my python knowledge is not much better than my > knowledge of the Human Genome Project - I know it exists and what they try > to do.) I don't think there's anything wrong with `import random`, it should simple import the standard random module. This seems to be either a problem in your setup or a Jython bug. Why are you trying to run Robot Framework directly from Java in your Maven plugin? Couldn't you simply run it through the system and then be able to use both Python and Jython interpreters? I think that was the idea in the prototype version that was created some time ago [1]. Anyway, this discussion is probably better continued on robotframework-users mailing list. [1] http://code.google.com/p/robotframework-javatools/source/browse/#svn/maven-plugin Cheers, .peke -- Agile Tester/Developer/Consultant :: http://eliga.fi Lead Developer of Robot Framework :: http://robotframework.org |
From: Kai H. <kai...@gm...> - 2010-03-15 21:30:16
|
> Why are you trying to run Robot Framework directly from Java in your > Maven plugin? Couldn't you simply run it through the system and then > be able to use both Python and Jython interpreters? I think that was > the idea in the prototype version that was created some time ago [1]. > Anyway, this discussion is probably better continued on > robotframework-users mailing list. > > Lets say a memory issue. Having the Hudson VM starting the Maven VM starting the Jython VM makes just too many VMs for our testing box. It works of course, but take more time than a direct call. all these VMs have a minimum memory consumption of 1GB per VM. And if I would have the option to call it internally, I would do it. BTW I have processed this further and I solved the issue for random.py - it was just not aware of the /Lib folder in the jython jar, so I added it to the classpath. But then later it failed for something in ntpaths.py or so and I gave up for now, had to be a bit productive. Cheers, SF |