[英]PythonInterpreter importing java classes
我具有以下文件結構:
src
|___mod
| |__ __init__.py
| |__ pycode.py
| |__ javacode.java
|
|___main
|__ start.java
pycode.py的內容:
from mod import javacode as jv
...
里面start.java
,我嘗試運行pycode.py
與Python解釋器。
PythonInterpreter py = new PythonInterpreter();
py.exec("from mod.pycode import *");
但是,出現以下錯誤:
ImportError: cannot import name javacode
這令人困惑,因為它似乎能夠找到該程序包,但是由於某種原因未能找到該文件。 我實際上已驗證它找到了該程序包,因為如果您提供了錯誤的程序包名稱,它會抱怨。
為了提供更多信息,我正在Eclipse的Windows上運行該程序。 我正在使用pydev插件進行日食。 我已將項目的bin文件夾添加為pydev的源文件夾(如一個源所建議),並且在程序開始時具有以下內容:
static {
PythonInterpreter.initialize(System.getProperties(), PySystemState.getBaseProperties(),
null);
}
誰能給我一個解決方法的想法?
它不起作用的原因是因為我將javacode.java
放在了python包中。
根據Jython Essentials的書,執行此操作會將java文件標記為python模塊:
Jython還允許通過import語句訪問Java類和包。 Jython能夠通過底層Java虛擬機(JVM)從Java類路徑和sys.path目錄中加載類。 從概念上講,您可以認為出於裝載Java類的目的,sys.path中的目錄已附加到類路徑中。 這意味着無需使用__init__.py模塊在sys.path上標記Java軟件包,因為這會使它們成為Python軟件包。
因此,在此之后,我將文件組織如下:
src
|___pymodules
| |__ __init__.py
| |__ pycode.py
|
|___mod
| |__ javacode.java
|
|___main
|__ start.java
在start.java
內部:
PythonInterpreter py = new PythonInterpreter();
py.exec("from pymodules.pycode import *");
現在,該程序即使在eclipse中執行,甚至在將其放入獨立的jar中之后,都可以完美執行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.