从java调用jython方法:can';在导入中找不到模块
问题陈述:我正在使用PySystemState调用java类中的jython模块,并在其上执行一些方法。现在的问题是,我的jython模块与位于同一jython项目中并行目录中的其他jython模块有一些依赖关系。结果,当我调用目标模块时,它抛出导入异常,表示无法找到依赖模块 my jython项目的结构:从java调用jython方法:can';在导入中找不到模块,java,integration,jython,Java,Integration,Jython,问题陈述:我正在使用PySystemState调用java类中的jython模块,并在其上执行一些方法。现在的问题是,我的jython模块与位于同一jython项目中并行目录中的其他jython模块有一些依赖关系。结果,当我调用目标模块时,它抛出导入异常,表示无法找到依赖模块 my jython项目的结构: jythonproject -src -folder1<has the module which is invoked from java> -folde
jythonproject
-src
-folder1<has the module which is invoked from java>
-folder2 < it has the modules which the module inside folder1 imports with statemet "from folder2 import x"
现在看来,我只导入folder1中的模块,然后让其中的类调用方法。现在,由于该模块具有来自位于folder2中的其他模块的导入,并且它们没有在java代码中加载,因此它无法定位该模块。
现在的问题是,我应该如何在folder2中加载依赖的模块以及我需要的folder1中的模块
伙计们,我注意到还有一件事,文件夹2中的模块导入到我从java调用的模块中,但其中没有类。所以我从java调用的模块有一个我正在调用的类,这个类依赖于一个jython模块,这个模块有一些方法,但它不是一个类。这就是它不起作用的原因,我得到了一个例外
尝试了其他一些事情,结果如下:
情景1:
pkg1具有具有class1的模块1
pkg2具有模块2和类2
模块1有一个import=>来自模块2 import class2
现在,当我从java程序中调用class1时,它工作得很好
场景2:
pkg1具有具有class1的模块1
pkg2有module2,它有方法定义,没有类
模块1具有来自pkg2导入模块2的导入=>
现在,当我从java程序调用class1时,这会引发异常
结论:
1) 当从java调用jython类时,我们不能使用从包导入。
2) 我们不能从java调用一个jython类,它从一个没有类的模块导入(只是方法定义)。因为jython在这个场景中只允许“从pkg导入”,我们同样会遇到第1点中的问题 您可能需要设置JYTHONPATH。请参见此处的相关问题。
不,那没用。我尝试在JYTHONPATH env变量中将路径添加到“folder2”,但出现了相同的错误
// Constructor obtains a reference to the importer, module, and the class name
public JythonObjectFactory(PySystemState state, Class interfaceType, String moduleName, String className) {
this.interfaceType = interfaceType;
PyObject importer = state.getBuiltins().__getitem__(Py.newString("__import__"));
PyObject module = importer.__call__(Py.newString(moduleName));
klass = module.__getattr__(className);
System.err.println("module=" + module + ",class=" + klass);
}