我有以下文件结构:
src
|___mod
| |__ __init__.py
| |__ pycode.py
| |__ javacode.java
|
|___main
|__ start.javaPycode.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);
}有人能告诉我我怎么解决这个问题吗?
发布于 2015-01-09 14:20:01
它不起作用的原因是我将javacode.java放在了一个python包中。
根据Jython基本要素一书,这样做会将java文件标记为python模块:
Jython还允许通过import语句访问Java类和包。Jython能够通过底层的(JVM)加载类,既可以从Java,也可以从sys.path中的目录加载。在概念上,您可以认为,为了加载sys.path类,sys.path中的目录已经附加到类路径中。--这意味着没有必要用__init__.py模块在sys.path上标记__init__.py包,因为这将使它们成为__init__.py包。
因此,在此之后,我将文件组织成这样:
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之后也是如此。
https://stackoverflow.com/questions/27852224
复制相似问题