我正在尝试使用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