如何检查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
有几个模块import语句,当我运行Java
代码时,我得到错误为javax.script.ScriptException: ImportError: No module named psycopg2
。 所有模块都安装在我的机器上,当我通过CLI正常运行python script
它会执行。 所以我的理解是Jython
classpath
正在寻找python
模块的其他地方。
我如何检查Jython
ScriptEngine
在哪里查找模块然后修改它包括我的python
模块实际存在的位置? 我是新手,所以请原谅任何缺乏理解。
注意:我的机器上安装了CentOS
和python 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\")");