Jython 中的报告实验室 "import error"
reportlab in Jython "import error"
我正在使用 jdk 1.8 和 Jython 2.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[=12=](<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
构建成功(总时间:2 秒)
如果有人能建议我远程执行 Python 脚本的替代方法,我将不胜感激。
此外,我在 python 中有一个庞大的代码库,其中在 java 中重写在预定时间内是不可行的。
Jython 是一个与您系统的 Python 完全不同(且独立)的 Python 解释器。虽然来自 Python 标准库的大多数库将存在于 Jython 中,但安装在您系统 Python 中的第三方模块对于 Jython 版本来说根本不存在。
Jython 足够兼容,您可以使用 Jython 解释器设置 Python virtualenv 并在该 virtualenv 中安装 pure-python 代码(即没有二进制模块)的模块 - 我不认为repotlab 符合这样的条件 - 但您可以尝试。在 Java 项目设置中,您的项目可能有自己的 Jython 解释器实例与其他 .jar 文件一起安装 - 它应该有一个 site-packages
文件夹,您可以在其中尝试复制纯 Python third-party 模块,但同样,我认为 reportlab 不会与 jython 兼容。
您的一个选择是在外部进程中使用 Python 本身 (cPython),并使用 xmlrpc 代码从 Java(或 Jython)调用它 - (A快速谷歌搜索没有找到我从纯 Java 通过 xmlrpc 调用 cPython 的方法 - 但我知道它适用于 Jython,如果你使用 Python 的标准库 xmlrpc 作为记录-
https://docs.python.org/3/library/xmlrpc.html?highlight=xmlrpc
我在 stackExchange link - Jython embedded in Java -- ImportError: No module named yaml 上有一个解决方案,即我可以简单地在我的 Jython 安装目录下添加我需要的包,例如 jython/Lib/site-packages 我没有Python2.7.
的报告实验室问题
最重要的是还使用 sys.path.append()
将它们附加到您的程序中
我正在使用 jdk 1.8 和 Jython 2.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[=12=](<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
构建成功(总时间:2 秒)
如果有人能建议我远程执行 Python 脚本的替代方法,我将不胜感激。
此外,我在 python 中有一个庞大的代码库,其中在 java 中重写在预定时间内是不可行的。
Jython 是一个与您系统的 Python 完全不同(且独立)的 Python 解释器。虽然来自 Python 标准库的大多数库将存在于 Jython 中,但安装在您系统 Python 中的第三方模块对于 Jython 版本来说根本不存在。
Jython 足够兼容,您可以使用 Jython 解释器设置 Python virtualenv 并在该 virtualenv 中安装 pure-python 代码(即没有二进制模块)的模块 - 我不认为repotlab 符合这样的条件 - 但您可以尝试。在 Java 项目设置中,您的项目可能有自己的 Jython 解释器实例与其他 .jar 文件一起安装 - 它应该有一个 site-packages
文件夹,您可以在其中尝试复制纯 Python third-party 模块,但同样,我认为 reportlab 不会与 jython 兼容。
您的一个选择是在外部进程中使用 Python 本身 (cPython),并使用 xmlrpc 代码从 Java(或 Jython)调用它 - (A快速谷歌搜索没有找到我从纯 Java 通过 xmlrpc 调用 cPython 的方法 - 但我知道它适用于 Jython,如果你使用 Python 的标准库 xmlrpc 作为记录- https://docs.python.org/3/library/xmlrpc.html?highlight=xmlrpc
我在 stackExchange link - Jython embedded in Java -- ImportError: No module named yaml 上有一个解决方案,即我可以简单地在我的 Jython 安装目录下添加我需要的包,例如 jython/Lib/site-packages 我没有Python2.7.
的报告实验室问题最重要的是还使用 sys.path.append()
将它们附加到您的程序中