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

我有这个Java代码,我用它来运行使用Jython ScriptEnginepython 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有几个模块import语句,当我运行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安装在/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\")");