【问题标题】:PythonInterpreter importing java classesPythonInterpreter 导入 java 类
【发布时间】:2015-03-07 06:45:50
【问题描述】:

我的文件结构如下:

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);
}

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

【问题讨论】:

    标签: java eclipse pydev jython


    【解决方案1】:

    之所以不起作用是因为我将javacode.java放在了python包中。

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

    Jython 还允许通过 import 语句访问 Java 类和包。 Jython 能够通过底层 Java 虚拟机 (JVM) 从 Java 类路径和 sys.path 中的目录加载类。从概念上讲,您可以认为为了加载 Java 类,sys.path 中的目录已附加到类路径中。 这意味着不需要在 sys.path 上用 __init__.py 模块标记 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 之后也可以完美执行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-15
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 2016-11-05
      • 2011-06-17
      • 2011-11-24
      相关资源
      最近更新 更多