首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导入java类的PythonInterpreter

导入java类的PythonInterpreter
EN

Stack Overflow用户
提问于 2015-01-09 00:51:15
回答 1查看 651关注 0票数 1

我有以下文件结构:

代码语言:javascript
复制
src
|___mod
|   |__ __init__.py
|   |__ pycode.py
|   |__ javacode.java
|
|___main
    |__ start.java

Pycode.py的内容:

代码语言:javascript
复制
from mod import javacode as jv
...

start.java内部,我尝试使用python解释器运行pycode.py

代码语言:javascript
复制
PythonInterpreter py = new PythonInterpreter();
py.exec("from mod.pycode import *");

但是,我得到以下错误:

代码语言:javascript
复制
ImportError: cannot import name javacode

它令人困惑,因为它似乎能够找到包,但由于某种原因无法找到该文件。事实上,我已经验证了它是否找到了包,因为如果您提供了错误的包名,它会发出抱怨。

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

代码语言:javascript
复制
static {
    PythonInterpreter.initialize(System.getProperties(), PySystemState.getBaseProperties(),
            null);
}

有人能告诉我我怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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包。

因此,在此之后,我将文件组织成这样:

代码语言:javascript
复制
src
|___pymodules
|   |__ __init__.py
|   |__ pycode.py
|
|___mod
|   |__ javacode.java
|
|___main
    |__ start.java

内部start.java

代码语言:javascript
复制
PythonInterpreter py = new PythonInterpreter();
py.exec("from pymodules.pycode import *");

这个程序现在在eclipse中完美地执行,甚至在变成一个独立的jar之后也是如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27852224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档