PythonInterpreter 导入 java 类

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 中,我尝试使用 python 解释器运行 pycode.py

PythonInterpreter py = new PythonInterpreter();
py.exec("from mod.pycode import *");

但是,我收到以下错误:

ImportError: cannot import name javacode

很困惑,因为它似乎能够找到包,但由于某种原因找不到文件。事实上,我已经验证它找到了这个包,因为如果你提供了错误的包名它会抱怨。

为了提供更多信息,我在 eclipse 中的 windows 上运行该程序。我正在为 eclipse 使用 pydev 插件。我已经将项目的 bin 文件夹添加为 pydev 的源文件夹(如一个来源所建议的),并且在我的程序开始时有以下内容:

static {
    PythonInterpreter.initialize(System.getProperties(), PySystemState.getBaseProperties(),
            null);
}

谁能告诉我如何解决这个问题?

它不起作用的原因是因为我将 javacode.java 放在 python 包中。

根据书 Jython Essentials,这样做会将 java 文件标记为 python 模块:

Jython also allows access to Java classes and packages through the import statements. Jython is able to load classes through the underlying Java Virtual Machine (JVM), both from the Java classpath and from the directories in sys.path. Conceptually, you can think that for the purpose of loading Java classes, the directories in sys.path have been appended to the classpath. This means there is no need to mark Java packages on sys.path with __init__.py modules, because that would make them Python packages.

所以在这之后,我整理了这些文件:

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 后都能完美执行