Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “Jython的reportlab”;导入错误“;_Java_Python_Jython 2.7 - Fatal编程技术网

Java “Jython的reportlab”;导入错误“;

Java “Jython的reportlab”;导入错误“;,java,python,jython-2.7,Java,Python,Jython 2.7,我使用JDK1.8和Jython2.7.0.jar来执行python代码。 但Jython似乎不支持Python的2.7特性“reportlab”模块 我的Java代码: package test; import java.util.logging.Level; import java.util.logging.Logger; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public c

我使用JDK1.8和Jython2.7.0.jar来执行python代码。 但Jython似乎不支持Python的2.7特性“reportlab”模块

我的Java代码:

package test;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class Test{
        public Test()  
        {
         System.out.println("Done!");
        engine.eval("import sys");
        engine.eval("print sys");
        engine.eval("import reportlab");
        engine.eval("print reportlab");
        System.out.println("Done Here");
    } 
    catch (ScriptException ex) 
    {
        Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        System.out.println(ex);
    }
}
public static void main(String args[])
{
    Test t=new Test();
}
}
我得到的错误是:

run:
Done!
<module 'sys' (built-in)>
javax.script.ScriptException: ImportError: No module named reportlab in    <script> at line number 1
Dec 28, 2015 8:57:52 PM test.Test <init>
SEVERE: null
javax.script.ScriptException: ImportError: No module named reportlab in    <script> at line number 1
    at      org.python.jsr223.PyScriptEngine.scriptException(PyScriptEngine.java:202)
at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:42)
at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:31)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
at test.Test.<init>(Test.java:28)
at test.Test.main(Test.java:40)
Caused by: Traceback (most recent call last):
 File "<script>", line 1, in <module>
ImportError: No module named reportlab

at org.python.core.Py.ImportError(Py.java:328)
at org.python.core.imp.import_first(imp.java:877)
at org.python.core.imp.import_module_level(imp.java:972)
at org.python.core.imp.importName(imp.java:1062)
at org.python.core.ImportFunction.__call__(__builtin__.java:1280)
at org.python.core.PyObject.__call__(PyObject.java:431)
at org.python.core.__builtin__.__import__(__builtin__.java:1232)
at org.python.core.imp.importOne(imp.java:1081)
at org.python.pycode._pyx2.f$0(<script>:1)
at org.python.pycode._pyx2.call_function(<script>)
at org.python.core.PyTableCode.call(PyTableCode.java:167)
at org.python.core.PyCode.call(PyCode.java:18)
at org.python.core.Py.runCode(Py.java:1386)
at org.python.core.__builtin__.eval(__builtin__.java:497)
at org.python.core.__builtin__.eval(__builtin__.java:501)
at org.python.util.PythonInterpreter.eval(PythonInterpreter.java:259)
at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:40)
... 4 more
运行:
完成!
javax.script.ScriptException:ImportError:第1行中没有名为reportlab的模块
2015年12月28日晚上8:57:52测试。测试
严重:空
javax.script.ScriptException:ImportError:第1行中没有名为reportlab的模块
位于org.python.jsr223.PyScriptEngine.scriptException(PyScriptEngine.java:202)
位于org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:42)
位于org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:31)
位于javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
test.test.(test.java:28)
位于test.test.main(test.java:40)
原因:回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:没有名为reportlab的模块
位于org.python.core.Py.importorror(Py.java:328)
首先访问org.python.core.imp.import_(imp.java:877)
在org.python.core.imp.import_模块_级别(imp.java:972)
位于org.python.core.imp.importName(imp.java:1062)
在org.python.core.ImportFunction.\uuuuu调用\uuuuuuuuuu(\uuuuu builtin\uuuuuuuu.java:1280)
在org.python.core.PyObject.\uu调用(PyObject.java:431)
在org.python.core.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
位于org.python.core.imp.importOne(imp.java:1081)
在org.python.pycode._pyx2.f$0(:1)
在org.python.pycode._pyx2.call_function()上
位于org.python.core.PyTableCode.call(PyTableCode.java:167)
位于org.python.core.PyCode.call(PyCode.java:18)
位于org.python.core.Py.runCode(Py.java:1386)
在org.python.core.\uuuuu-builtin\uuuuu.eval(\uuuu-builtin\uuuuu.java:497)
在org.python.core.\uuuuu-builtin\uuuuu.eval(\uuuuu-builtin\uuuu.java:501)
位于org.python.util.PythonInterpreter.eval(PythonInterpreter.java:259)
位于org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:40)
... 4更多
生成成功(总时间:2秒)

如果有人能向我推荐一种远程执行Python脚本的替代方法,我将非常感谢他们


另外,我有一个很大的python代码库,在计划的时间内用java重写是不可行的。

Jython是一个与系统python完全不同(且独立)的python解释器。虽然Python标准库中的大多数库都存在于Jython中,但安装在系统Python中的第三方模块对于Jython版本来说根本不存在

Jython足够兼容,您可以使用Jython解释器设置Python virtualenv,并在该virtualenv中安装纯Python代码的模块(即没有二进制模块)——我认为repotlab不符合这一条件——但您可以尝试。在Java项目设置中,您的项目可能有自己的Jython解释器实例以及其他.jar文件—它应该有一个
site packages
文件夹,您可以尝试将纯Python第三方模块复制到其中,但我认为reportlab不会与Jython兼容

您的一个选择是在外部进程中使用Python本身(cPython),并使用xmlrpc代码从Java(或Jython)调用它(Google很快就没有找到从纯Java通过xmlrpc调用cPython的方法),但我知道它可以从Jython使用,如果您使用Python的stdlib xmlrpc,正如文档所述-

我在stackExchange链接上找到了一个解决方案,也就是说,我可以简单地在Jython安装目录下添加我需要的包,例如Jython/Lib/site包。我在reportlab for Python2.7上没有问题


最重要的是,还可以使用sys.path.append()将它们附加到您的程序中。谢谢您的回复。如果您知道更多我可以如何做到这一点,请告诉我;我也在考虑在Java内置的Android应用程序中执行同样的操作,该应用程序将调用python脚本。如果我使用python,我将能够更有效地使用我的资源。