我从此链接中获取了一个书面示例,以编写我的Python + Java集成代码。
http://www.jython.org/jythonbook/en/1.0/JythonAndJavaIntegration.html
代码如下所示。
package org.jython.book.interfaces;
import org.jython.book.interfaces.JythonObjectFactory;
import org.python.core.Py;
import org.python.core.PyString;
import org.python.core.PySystemState;
public class Main {
public static void main(String args[]) {
String projDir = System.getProperty("user.dir");
String rootPath = projDir + "/src/org/jython/book/interfaces/";
String modulesDir = projDir + "/src/org/jython/book/interfaces/";
System.out.println("Project dir: " + projDir);
PySystemState sysSt = Py.getSystemState();
JythonObjectFactory factory = new JythonObjectFactory(sysSt, BuildingType.class, "Building", "Building");
BuildingType building = (BuildingType) factory.createObject();
building.setBuildingName("BUIDING-A");
building.setBuildingAddress("100 MAIN ST.");
building.setBuildingId(1);
System.out.println(building.getBuildingId() + " " +
building.getBuildingName() + " " +
building.getBuildingAddress());
}
}
当我运行此代码时,它抛出一个错误,即找不到python模块。我将.py和.pyc文件保留在“ modulesDir”提供的路径下。
文献说
"the requested module must be contained somewhere on the sys.path"
;但是,我不明白如何从此Java程序中进行设置。有人可以帮忙吗?Project dir: /Users/eclipsews/PythonJava
Exception in thread "main" ImportError: No module named Building
最佳答案
您好找到了这个问题的答案!
添加了PySystemState.initialize方法,在该方法中我明确提供了“ python.path”属性,该属性已初始化为我的项目的路径,其中有python模块可用。
private static Properties setDefaultPythonPath(Properties props) {
String pythonPathProp = props.getProperty("python.path");
String new_value;
if (pythonPathProp == null) {
new_value = System.getProperty("user.dir") + "/src/org/jython/book/interfaces/";
}
props.setProperty("python.path", new_value);
return props;
}
Properties props = setDefaultPythonPath(System.getProperties());
PySystemState.initialize( System.getProperties(), props, null );
这将产生正确的输出,如下所示:
module=<module 'Building' from '/Users/eclipsews/PythonJava/src/org/jython/book/interfaces/Building$py.class'>,class=<class 'Building.Buildin
g'>
1 BUIDING-A 100 MAIN ST.
关于java - 如何在Jython/Java代码中提供python包路径?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46965817/