簡體   English   中英

從Java調用jython方法:在導入中找不到模塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM