Diferentes / mejores enfoques para llamar a la función python desde Java

Soy bastante nuevo en Python y estoy tratando de llamar a la función de Python desde Java.

Mis requisitos principales son estos:

la llamada debe ser transparente, en el sentido de que no debe requerir modificaciones.py simplemente para permitir que se llame desde Java. Podría recibir cualquier archivo de Python con algunas funciones dentro de él. Debería poder llamar a cualquiera de estas funciones sin tener que modificar.py archivo.Quiero poder enviar argumentos de ambos tipos primitivos (int, String, floats etc.) o tipos no primitivos (HashMap,ArrayList) de java a la función de python y recibe de vuelta el objeto devuelto (que puede ser de tipos primitivos o no primitivos) de python a java. También estoy usando Pandas DataFrame y numpy ndarray y, por lo tanto, también quiero poder enviar y recibir los objetos correspondientes hacia y desde Java.I preferiblemente quiero seguir con CPython en lugar de Jython porque podría necesitar usar bibliotecas más nuevas que podrían no estar disponibles en Jython.

Hay varias opciones que encontré en línea. Pocos son:

Usa JythonPythonInterpreter con el que puedo invocar la función python sin requerir ningún cambio en.py archivo de comandos:

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
      }
 }

Soy muy capaz de satisfacer mis necesidades. Pero no es CPython.

UtilizarScriptEngine: Esto es muy similar a PythonInterpreter. Pero contra su Jython. Además, a diferencia de PythonInterpreter, no podemos trabajar con Jython 2.5+ y no podemos acceder directamente a PyObjects. Entonces esta opción puede estar muy bien cerrada.

Utilizarpy4j: No puedo encontrar un ejemplo que sea tan mínimo como en el caso de Jython PythonInterpreterUtilizarjava2python. Perono se da mucha información sobre llamar a python desde java para poder concluir si se pueden cumplir mis requisitos anteriores. ¿Alguien puede arrojar más luz sobre esto? Más específicamente, si podemos escribir el código tan mínimo como el de Jython PythonInterpreter.UtilizarJPype: Sin embargo, después de una revisión rápida, siento que no podré escribir un código mínimo como en el caso de Jython PythonInterpreter. También sentí que el proyecto no estaba en desarrollo. ¿Lo es?

Parece que Jython PythonInterpreter es la mejor opción si he entendido todos los enfoques anteriores correctamente. ¿He cometido errores al comprenderlos? ¿También hay alguna otra mejor opción?

Respuestas a la pregunta(2)

Su respuesta a la pregunta