我可以使用以下代码获取应用程序:
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.jar
和jython-standalone-2.7-b1.jar
。我甚至尝试将这些jar文件插入到我的路径中,仍然没有骰子。
我可以从文件夹中的.jar文件导入 java 类,但jython .jars中的文件除外。例如,jython-2.7-b1.jar
内org/python/apache/xml/serialize/Serializer.class
。我可以导入org.python
,但只存在org.python.__name__
。