1.问题:提示不能够导入site module
一般在Java中调用Python,执行代码流程如下:
Properties props = new Properties();
props.put("python.home", "F:\\spring-app\\src\\main\\webapp\\WEB-INF\\lib");
props.put("python.console.encoding", "UTF-8");
props.put("python.security.respectJavaAccessibility", "false");
props.put("python.import.site", "false");
Properties preprops = System.getProperties();
PythonInterpreter.initialize(preprops, props, new String[0]);
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("F:\\spring-app\\src\\main\\webapp\\WEB-INF\\lib\\main.py");
PyFunction func = (PyFunction) interpreter.get("function_name", PyFunction.class );
PyObject pyobj = func.__call__();
只要在代码中添加:props.put(“python.import.site”, “false”);即可处理上面的错误。
2.本人还遇到一种情况,添加props.put(“python.import.site”, “false”);之后仍然报错
这种情况代码如下:
PySystemState sys = Py.getSystemState();
sys.path.add("F:\\spring-app\\src\\main\\webapp\\WEB-INF\\lib");
Properties props = new Properties();
props.put("python.home", "F:\\spring-app\\src\\main\\webapp\\WEB-INF\\lib");
props.put("python.console.encoding", "UTF-8");
props.put("python.security.respectJavaAccessibility", "false");
props.put("python.import.site", "false");
Properties preprops = System.getProperties();
PythonInterpreter.initialize(preprops, props, new String[0]);
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("F:\\spring-app\\src\\main\\webapp\\WEB-INF\\lib\\main.py");
PyFunction func = (PyFunction) interpreter.get("function_name", PyFunction.class );
PyObject pyobj = func.__call__();
可以看出只是多了两行代码:
PySystemState sys = Py.getSystemState();
sys.path.add("F:\\spring-app\\src\\main\\webapp\\WEB-INF\\lib");
代码主要是将上面路径加入path中,这样可以在Python代码中import 自己的Python 文件。加上上面代码错误再次出现,但如果将上面两行代码放在,props.put(“python.import.site”, “false”); 之后,错误消除。
测试发现只要执行Py.getSystemState(); 再执行props.put(“python.import.site”, “false”); 便不起作用,其中问题还望各位大牛指点一二!