JyNI Eclipse设置

时间:2018-06-21 15:13:04

标签: eclipse numpy jython jyni

我在Eclipse中具有以下Java文件。

package java_python_tutorial;
import org.python.core.PyInstance;
import org.python.util.PythonInterpreter;

public class MainJython {
    public static void main(String[] args) {
        PythonInterpreter python = new PythonInterpreter();
        python.execfile("pytest/test_np.py");
//      PyInstance test = (PyInstance) python.eval("Test()");
//      test.invoke("printArr");
        python.close();
    }
}

如果仅包括Jython JAR,则运行文件将导致Python产生ImportError: no module named numpy。我尝试通过在项目构建路径中也包含JyNI JAR来解决此问题,但是现在运行文件会出现此错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/python/modules/_weakref/ReferenceBackendFactory
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
    at java.lang.Class.getConstructor0(Class.java:3075)
    at java.lang.Class.newInstance(Class.java:412)
    at org.python.core.PySystemState.initialize(PySystemState.java:1015)
    at org.python.core.PySystemState.initialize(PySystemState.java:947)
    at org.python.core.PySystemState.initialize(PySystemState.java:930)
    at org.python.core.PySystemState.initialize(PySystemState.java:925)
    at org.python.core.PySystemState.initialize(PySystemState.java:920)
    at org.python.core.PySystemState.initialize(PySystemState.java:916)
    at org.python.core.ThreadStateMapping.getThreadState(ThreadStateMapping.java:32)
    at org.python.core.Py.getThreadState(Py.java:1440)
    at org.python.core.Py.getThreadState(Py.java:1436)
    at org.python.core.Py.getSystemState(Py.java:1456)
    at org.python.util.PythonInterpreter.<init>(PythonInterpreter.java:105)
    at org.python.util.PythonInterpreter.<init>(PythonInterpreter.java:94)
    at org.python.util.PythonInterpreter.<init>(PythonInterpreter.java:71)
    at java_python_tutorial.MainJython.main(MainJython.java:7)
Caused by: java.lang.ClassNotFoundException: org.python.modules._weakref.ReferenceBackendFactory
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 18 more

作为参考,我正在调用的Python脚本的内容为:

import numpy as np

class TestNP(object):
    def __init__(self):
        self.arr = np.array([[1,2,3],[4,5,6]])

    def printArr(self):
        print(self.arr)

0 个答案:

没有答案