天天看点

in thread "main" ImportError: Cannot import site module and its dependencies: No module named site1.问题:提示不能够导入site module2.本人还遇到一种情况,添加props.put(“python.import.site”, “false”);之后仍然报错

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[]);
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[]);
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”); 便不起作用,其中问题还望各位大牛指点一二!