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

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了!

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值