从 Java 调用 python 函数的不同/更好的方法

Different / better approaches for calling python function from Java

我是 python 的新手,正在尝试从 java 调用 python 的函数。

我的主要要求是:

我在网上找到了几个选项。少数是:

如果我正确理解了上述所有方法,那么 Jython PythonInterpreter 似乎是最佳选择。我是不是在把握的过程中犯了错误?还有其他更好的选择吗?

这个问题目前没有答案。使用 CPython 依赖于 Python 字节码的执行,这反过来又要求将 Python 解释器嵌入到执行环境中。由于没有 Java 运行时带有嵌入式 Python 解释器,因此看起来 Jython 确实是最佳答案。

有时您想要的答案是找不到的!

@Mahesha999,关于坚持使用 CPython 的能力,从你上一条评论来看现在这似乎很重要:

Jep 是一个很好的选择,它能够 运行 python 调用本机的代码,例如您提到的 pandas。

您需要编写一些包装代码,因为 Jep 仅在最常用的类型之间实现 Java 和 Python 之间的自动转换,而 pandas.DataFrame 不是。

但是,如果您的用例不是很复杂,您可以通过在数据帧实例上调用 DataFrame.values 来将 pandas 对象作为 numpy.NDArray 对象访问,并且 Jep 实现转换为Java class 它为 NDArray 嵌入。

您可以使用 Jep.getValue(String pythonVariableName, Class clazz)

从您执行的 python 代码返回 Java 值

例如

Jep jep = new Jep();
jep.eval("import my_script");
jep.eval("df = my_script.function_returning_a_dataframe()");
jep.eval("col = df.a_column.values");
NDArray myCol = jep.getValue("col", NDArray.class);

我在 Python 中编写的一个项目上这样做,我需要将其作为插件集成到 Java 应用程序中,到目前为止它可以工作。