0

我正在尝试使用org.python.*库(又名 jython)在 Java 中运行 python v3 脚本

import org.python.util.PythonInterpreter;
...
@Test
public void test() throws Exception {

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    MapUtils.debugPrint(new PrintStream(baos), "ENV:" , System.getenv());

    // This just shows that JYTHONPATH and PYTHONPATH are in my system env.

    log.debug("System.getenv(): {}", new String(baos.toByteArray(), StandardCharsets.UTF_8));

    try(PythonInterpreter pyin = new PythonInterpreter()) {
        pyin.execfile(JYTHON_PY.toString()); // <--- fails here due to module missing.
    }

}

JYTHONPATH=$PYTHONPATH mvn compile test-compile -pl RMBN-Service surefire:test@jython

org.python.core.PyException: ImportError: No module named sysrepo

我目前运行上述行以确保设置了 JYTHONPATH 变量,但这也不起作用。(基于此处的建议:https ://www.stefaanlippens.net/jython_and_pythonpath/ )

但是,在我的脚本中,我需要位于我的 $PYTHONPATH 系统变量中的模块,但是 PythonInterpreter 没有使用该 PYTHONPATH(也不是 JYTHONPATH)变量。

我的版本:

  • JDK 8
  • MVN 3.6
  • org.python - jython-standalone - 2.7.2

还有我的相关系统环境:

DEBUG RmbnJythonSysrepoTest:54 - System.getenv(): ENV: = 
{
    PATH = /sbin:/bin:/usr/sbin:/usr/bin:/opt/maven/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vagrant/.local/bin:/home/vagrant/bin:/home/vagrant/.local/bin:/home/vagrant/bin java.lang.String
    JAVA_HOME = /usr/lib/jvm/jre-openjdk java.lang.String
    MAVEN_HOME = /opt/maven java.lang.String
    LOGNAME = vagrant java.lang.String
    MAVEN_CMD_LINE_ARGS =  compile test-compile -pl RMBN-Service surefire:test@jython java.lang.String
    _ = /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre/bin/java java.lang.String
    **PYTHONPATH = /usr/local/lib/python3.6/dist-packages java.lang.String**
    SHELL = /bin/bash java.lang.String
    USER = vagrant java.lang.String
    **JYTHONPATH = /usr/local/lib/python3.6/dist-packages java.lang.String**
    M2_HOME = /opt/maven java.lang.String
    HOME = /home/vagrant java.lang.String
} java.util.Collections$UnmodifiableMap
4

0 回答 0