Jython独立jar无法找到site_packages

时间:2017-11-05 17:47:29

标签: java python jython jython-2.7

我正在与Jython集成以运行python脚本(它自己运行良好)。我将Jython Standalone 2.7.1添加到我的pom.xml中,但它似乎无法识别site_packages下安装的软件包。我尝试过像herehere这样的建议。但是它们似乎都没有用。如果我从独立jar转移到非独立jar,我会得到ImportError: No module named os。使用独立jar我可以向前移动一步,但我得到如下错误。 test_frameworksite_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");

2 个答案:

答案 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,需要重新访问。