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

Jython调用不包含第三方库的python脚本

2017-11-15 08:51 1406 查看
1、本地环境安装的是Python 2.7.11

2、用maven下载jython依赖

<pre name="code" class="html"><dependency>  
    <groupId>org.python</groupId>  
    <artifactId>jython</artifactId>  
    <version>2.7.0</version>  
</dependency>  

3、python脚本编写

#coding:utf-8  
  
def adder(a, b):    
   return a + b   
  
def mytest(str2):  
    print str2  
    return 'call success !!!'  

4、Java调用Python 

<pre name="code" class="java">package test1;  
  
import java.util.Properties;  
  
import org.python.core.PyFunction;  
import org.python.core.PyInteger;  
import org.python.core.PyObject;  
import org.python.core.PyString;  
import org.python.util.PythonInterpreter;  
  
public class Java2Python {  
    public static void main(String args[]) {  
        Properties props = new Properties();  
        props.put("python.home","D:/Python27/Lib");  
        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 interpreter = new PythonInterpreter();  
  
        interpreter.execfile("E:/workspace3/test1/src/main/java/test1/my_utils.py");  
        PyFunction adder = (PyFunction) interpreter.get("adder", PyFunction.class);  
  
        int a = 30, b = 50;  
        PyObject pyobj = adder.__call__(new PyInteger(a), new PyInteger(b));  
        System.out.println("anwser = " + pyobj.toString());  
        PyFunction mytest = (PyFunction) interpreter.get("mytest", PyFunction.class);  
        PyObject pyobj2 = mytest.__call__(new PyString("this is java project!!!"));  
        System.out.println(pyobj2.toString());  
        interpreter.close();  
  
    }  
}  



以上方式可以实现Java调用Python,但是在python 脚本中只能有python的原生api,如果在在脚本中有引入pandas,numpy之类的第三方扩展包,还是会是会找不到,这个问题正在查找是什么原因..

numpy , scipy 都是 c python 的第三方模块,是用 c (部分 c++, 和 fortran )写的,必然不支持
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: