Различные / лучшие подходы для вызова функции Python из Java

Я новичок в Python и пытаюсь вызвать функцию Python из Java.

Мои основные требования следующие:

вызов должен быть прозрачным, в том смысле, что он не должен требовать изменения.py файл просто, чтобы позволить ему быть вызванным из Java. Я мог бы дать любой файл Python с некоторыми функциями внутри него. Я должен иметь возможность вызывать любую из этих функций без необходимости изменения.py файл.Я хочу иметь возможность отправлять аргументы обоих примитивных типов (int, String, floats и т. д.) или не примитивные типы (HashMap,ArrayList) из Java в функцию Python и получить обратно возвращенный объект (который может быть примитивных типов или не примитивных типов) из Python в Java. Я также использую pandas DataFrame и numpy ndarray и, следовательно, также хочу иметь возможность отправлять и получать соответствующие объекты в и из Java.I предпочтительно Я хочу придерживаться CPython вместо Jython, потому что мне может понадобиться использовать более новые библиотеки, которые могут быть недоступны в Jython.

Есть несколько вариантов, которые я нашел в Интернете. Мало кто из них:

Используйте JythonPythonInterpreter с помощью которого я могу вызвать функцию Python без каких-либо изменений в.py файл сценария:

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

Я очень хорошо могу удовлетворить свои потребности. Но это не CPython.

использованиеScriptEngine: Это очень похоже на PythonInterpreter. Но опять же его Jython. Кроме того, в отличие от PythonInterpreter, мы не можем работать с Jython 2.5+ и не можем напрямую обращаться к PyObjects. Так что эта опция может быть очень хорошо закрыта.

использованиеpy4j: Не могу найти пример, который так же минимален, как в случае с Jython PythonInterpreterиспользованиеjava2python, Ноне так много информации о вызове python из java, чтобы я мог сделать вывод, могут ли мои вышеуказанные требования быть выполнены. Кто-нибудь может пролить больше света на это? Точнее, если мы сможем написать такой же минимальный код, как в Jython PythonInterpreter.использованиеJPype: Однако после быстрого прохождения я чувствую, что не смогу написать столь же минимальный код, как в случае с Jython PythonInterpreter. Также я почувствовал, что проект несколько не в разработке. Это?

Кажется, что Jython PythonInterpreter - лучший выбор, если я правильно понял все вышеперечисленные подходы. Я сделал ошибки, схватив их? Также есть какой-нибудь другой лучший вариант?

Ответы на вопрос(2)

Ваш ответ на вопрос