您的位置:首页 > 编程语言 > Java开发

java调用jython报ImportError: No module named...错误解决方法

2016-03-28 11:45 676 查看
Java调用Python开发环境配置(Eclipse+Jython+PyDev)中说明了如何通过java调用jython的代码,但是这有一个前提,就是jython中的代码没有import jython自己的包,如果在jython中引入了自己的包,比如加一句

import urllib


此时java在调用这个jython时就可能会报

import urllib

ImportError: No module named

这样的错误,虽然此时如果单独运行jython文件,不会报错,但是如果在java中调用的话就会报错。

这是因为单独运行jython和在java中调jython运行时的加载类的路径不一样,有兴趣的朋友可以在jython文件的顶部加上如下代码

#coding:utf-8
import sys
print(sys.path)


把jython运行时加载类库的路径打印出来看一下,就会发现通过java运行时,路径少了很多东西,所以就引入不到jython的类库了。因此解决办法就是在java中指定jython运行时需要加载类库的路径,通常是jython的安装目录,如果有自己写的jython文件,那也需要加上自己写的文件的路径。

java中代码如下。

Properties props = new Properties();
props.put("python.console.encoding", "UTF-8"); // Used to prevent: console: Failed to install '': java.nio.charset.UnsupportedCharsetException: cp0.
props.put("python.security.respectJavaAccessibility", "false"); //don't respect java accessibility, so that we can access protected members on subclasses
props.put("python.import.site","false");
Properties preprops = System.getProperties();
PythonInterpreter.initialize(preprops, props, new String[0]);
PythonInterpreter interp = new PythonInterpreter();
interp.exec("import sys");
interp.exec("sys.path.append('D:/Program Files (x86)/jython2.7.0/Lib')");//jython自己的
interp.exec("sys.path.append('D:/Program Files (x86)/jython2.7.0/Lib/site-packages')");//jython自己的
interp.exec("sys.path.append('F:/workspace/wxserver/WebContent/py')");//我们自己写的


这样在java中调用jython就OK了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: