我有以下文件结构:
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程序。我正在使用pydev插件进行eclipse。我已经将项目的bin文件夹添加为pydev的源文件夹(由一个来源建议),我在程序开始时有以下内容:
static {
PythonInterpreter.initialize(System.getProperties(), PySystemState.getBaseProperties(),
null);
}
有谁能告诉我如何解决这个问题?
答案 0 :(得分:1)
它之所以不起作用是因为我将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之后