[英]invoking jython methods from java : couldn't locate modules in import
問題陳述:我正在使用PySystemState來調用java類中的jython模塊並對其執行一些方法。 現在的問題是,我的jython模塊與位於同一jython項目中並行目錄中的其他一些jython模塊具有某些依賴性。 結果,當我調用目標模塊時,它會拋出導入異常,提示無法找到依賴模塊。
我的jython項目的結構:
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"
異常=>沒有名為folder2的模塊
請注意,在Java項目中,我正在設置JYTHONPATH env變量,該變量的路徑分別為folder1和folder2。
我在yython 5.3中使用eclipse環境。
2)更多研究:我正在使用PySystemState從Java調用jython模塊。 這是加載模塊和類的規范。
// 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);
}
現在看來,我只導入Folder1中的模塊,然后在其中獲取類以調用方法。 現在,由於此模塊已從位於folder2中的其他模塊導入,並且未以Java代碼加載,因此無法找到該模塊。 現在的問題是,我應該如何在我需要的文件夾2中加載依賴的模塊以及在文件夾1中的模塊。
伙計們,我注意到文件夾2中的另一個模塊(該模塊是從Java調用的模塊中導入的)中沒有類。 因此,我從Java調用的模塊有一個我正在調用的類,並且該類依賴於jython模塊,該模塊具有一些方法,但不是類。 碰巧是這不起作用的原因,而我卻遇到了異常。
嘗試了其他一些事情,結果是這樣的:場景1:pkg1的class1為class1 pkg2的class2為module2,模塊1的import => from module2 import class2現在,當我從Java程序調用class1時,它可以正常工作。
方案2:pkg1的模塊1的類為pkg2的模塊2的方法定義且沒有類,並且模塊1的import => from pkg2 import module2現在,當我從Java程序調用class1時,這引發了異常。
結論:1)從Java調用jython類時,不能使用從包中導入。 2)我們不能從java中調用一個jython類,它是從一個沒有類的模塊(只是方法定義)中導入的。 因為在這種情況下jython僅允許“從pkg導入”,因此再次遇到第1點中的問題。
您可能需要設置JYTHONPATH。 在這里查看相關的Stackoverflow問題。 Jython不會將PYTHONPATH加載到sys.path中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.