从tomcat调用时,为什么我无法访问Jython访问stdlib模块?

时间:2014-09-16 19:19:11

标签: jython jython-2.7

我可以使用以下代码获取应用程序:

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__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>}

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

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

0 个答案:

没有答案