Abordagens diferentes / melhores para chamar a função python do Java

Eu sou bastante novo para python e estou tentando chamar a função de python do java.

Meus principais requisitos são os seguintes:

A chamada deve ser transparente, no sentido de não exigir modificação.py arquivo simplesmente para permitir que ele seja chamado de java. Eu poderia receber qualquer arquivo python com algumas funções dentro dele. Eu deveria poder chamar qualquer uma dessas funções sem precisar modificar.py Arquivo.Quero poder enviar argumentos dos dois tipos primitivos (int, String, floats etc.) ou tipos não primitivos (HashMap,ArrayList) da função java para python e receba de volta o objeto retornado (que pode ser de tipos primitivos ou não primitivos) de python para java. Também estou usando pandas DataFrame e numpy ndarray e, portanto, também quero poder enviar e receber objetos correspondentes de e para java.I preferencialmente deseja aderir ao CPython em vez do Jython porque talvez eu precise usar bibliotecas mais recentes que podem não estar disponíveis no Jython.

Existem várias opções que encontrei online. Poucos são:

Use o JythonPythonInterpreter com o qual sou capaz de chamar a função python sem exigir nenhuma alteração no.py Arquivo de script:

py1.py

 def square2(list):
     squares = []
     for i in list:
         squares.append(i*i)
     return squares

JythonTest.groovy

 import org.python.util.PythonInterpreter
 import org.python.core.*;

 class JythonTest
 {
      static main(def args)
      {
          PythonInterpreter pi = new PythonInterpreter()
          pi.exec("from py1 import square2")
          PyFunction pf = (PyFunction)pi.get("square2")
          println pf.__call__(new PyList([1,2,3,4]))[2]   //9
      }
 }

Sou muito capaz de satisfazer minhas necessidades. Mas não é CPython.

UsarScriptEngine: Isso é muito semelhante ao PythonInterpreter. Mas contra o seu Jython. Além disso, diferentemente do PythonInterpreter, não podemos trabalhar com o Jython 2.5+ e não podemos acessar diretamente o PyObjects. Portanto, esta opção pode ser muito bem fechada.

Usarpy4j: Não é possível encontrar um exemplo tão mínimo quanto no caso do Jython PythonInterpreterUsarjava2python. Maspouca informação é dada sobre como chamar python do java para que eu possa concluir se meus requisitos acima podem ser satisfeitos. Alguém pode lançar mais luz sobre isso? Mais especificamente, se podemos escrever o código tão mínimo quanto o do Jython PythonInterpreter.UsarJPype: No entanto, após uma rápida análise, sinto que não poderei escrever um código tão mínimo quanto no caso do Jython PythonInterpreter. Também senti que o projeto não estava em desenvolvimento. É isso?

Parece que o Jython PythonInterpreter é a melhor escolha se eu entendi todas as abordagens acima corretamente. Cometi erros ao agarrá-los? Também existe outra opção melhor?

questionAnswers(2)

yourAnswerToTheQuestion