我正在与Jython集成以运行python脚本(它自己运行良好)。我将Jython Standalone 2.7.1添加到我的pom.xml中,但它似乎无法识别site_packages
下安装的软件包。我尝试过像here和here这样的建议。但是它们似乎都没有用。如果我从独立jar转移到非独立jar,我会得到ImportError: No module named os
。使用独立jar我可以向前移动一步,但我得到如下错误。 test_framework
是site_packages
ImportError: No module named test_framework
这是代码。似乎某些路径未设置,但我无法确定哪一条路径。
Properties props = new Properties();
props.put("python.home", "x/.m2/repo/org/python/jython-standalone/2.7.1");
props.put("jython.home", "x/.m2/repo/org/python/jython-standalone/2.7.1");
props.put("python.console.encoding", "UTF-8");
props.put("python.security.respectJavaAccessibility", "false");
props.put("python.import.site", "false");
Properties preprops = System.getProperties();
PythonInterpreter.initialize(preprops, props, new String[0]);
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("import sys\n" +
"sys.path.append('src/test/resources/pythonScript')" +
"\nimport pythonScript.test_command as sc");
PyObject someObj = interpreter.eval("sc.TestCommand()");
PyObject someFunc = someObj.__getattr__("deliver_command");
答案 0 :(得分:0)
似乎某些路径未设置,但我无法弄明白 哪一个。
当您使用Jython独立jar时,python.home
应指向您的Lib文件夹。解压缩Jython独立jar,将'Lib'文件夹复制到某个位置,并将python.home
指向该路径。
props.put("python.home", "/path/to/folder/Lib");
要安装软件包,请将其复制到Lib文件夹的根目录。示例为了使用包'test_framework'将其粘贴到Lib文件夹中并使用import test_framework
导入包。
此外,当您使用独立jar时,您无需设置jython.home
属性
答案 1 :(得分:0)
我遇到了同样的问题。我通过在脚本中添加以下内容来修复它:
from os.path import split, join
import site
for prefix in set(site.PREFIXES):
path, subdir = split(prefix)
if subdir == 'bin':
lib = join(path, 'lib', 'python2.7', 'site-packages')
site.addsitedir(lib)
我的site.PREFIXES只有两个重复的条目,因此我使用set()来减少照明。我不使用的想法是在将路径添加为站点目录之前确保该路径存在。另外,我已经对Python的版本进行了硬编码。有朝一日,Jython将升级到3.x,需要重新访问。