如何检查Jython ScriptEngine查找python模块的类路径



我有这个Java代码,我使用Jython ScriptEngine运行python script:

StringWriter writer = new StringWriter();
ScriptEngineManager manager = new ScriptEngineManager();
ScriptContext context = new SimpleScriptContext();
context.setWriter(writer);
ScriptEngine engine = manager.getEngineByName("python");
engine.eval(new FileReader("/Users/folder1/test.py"), context);

在我的python script中有几个模块导入语句,当我运行Java代码时,我得到错误为javax.script.ScriptException: ImportError: No module named psycopg2。所有模块都安装在我的机器上,当我通过CLI正常运行python script时,它会执行。所以我的理解是,Jython classpath正在寻找其他地方的python模块。

我如何检查Jython ScriptEngine在哪里寻找模块,然后修改它,包括实际上我的python模块存在的地方?我是新手,所以请原谅我的理解不足。

注意:我的机器上安装了CentOSpython 2.7.5

sys.path是一个字符串列表,它指定Jython(和Python)在哪里搜索模块。你可以像这样检查它的值:

engine.eval("import sys; print sys.path");

添加目录到sys.path,使用JYTHONPATH环境变量。如果yourmodule安装在/path/to/modules/yourmodule中,它看起来像这样:

export JYTHONPATH=/path/to/modules

另一种方法是使用python.path属性


不幸的是,在psycopg2的情况下,上述内容不起作用,因为该包是C扩展,因此仅与CPython兼容。也许您可以将Psycopg移植到Ctypes。

使用ScriptEngine向带有自定义python库的文件夹添加路径的另一种方法:

engine.eval("import sys; sys.path.append("/some/path/to/folder/withpylibs")");

最新更新