3

我可以使用其中包含以下代码的应用程序:

PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("import os");
interpreter.exec("import mylib");

以下是resources/Lib/mylib/__init__.py

from __future__ import print_function
from . import myfriend as thing
import os

print("Yep, everything works")

并使用 maven 编译它,产生一个my-app-with-dependencies.jar

我可以轻松地运行它,java -jar my-app-with-depenendencies.jar它工作得很好,万岁!

这是可悲的部分出现的地方。我可以将完全相同的代码放入 Spring 处理程序中:

@RequestMapping("/doesnotwork")
public @ResponseBody String sadness() {
    PythonInterpreter interpreter = new PythonInterpreter();
    interpreter.exec("import os");
    interpreter.exec("import mylib");  

    return "Quoth the Java, nevermore";
}

神奇的是,这不再有效。一点点都没有。

但是,我可以将我的文件从移动resources/Lib/webapp/WEB-INF/lib/Lib/import mylib工作。但在mylib我不能再从__future__or导入os。我可以import sys,我的 sys.path 看起来像这样:

['/path/to/my/webapp/WEB-INF/lib/Lib', '__classpath__', '__pyclasspath__/']

我的sys.path_importer_cache样子是这样的:

{'__classpath__': <type 'org.python.core.JavaImporter'>,
 '/path/to/my/webapp/WEB-INF/lib/Lib': None, 
 '/path/to/my/webapp/WEB-INF/lib/Lib/mylib': None, 
 '__pyclasspath__/': <ClasspathPyImporter object at 0x2>}

我做错了什么,我无法导入标准库?/path/to/my/webapp/WEB-INF/lib包含jython-2.7-b1.jarjython-standalone-2.7-b1.jar。我什至尝试将这些 jar 文件插入到我的路径中,但仍然没有骰子。

我可以从文件夹中的 .jar 文件导入java类,但 jython .jar 中的文件除外。例如,里面jython-2.7-b1.jarorg/python/apache/xml/serialize/Serializer.class。我可以导入org.python,但只有存在org.python.__name__

4

0 回答 0