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

Программисты JAVA общаются здесь
Ответить
Anonymous
 Различные/лучшие подходы для вызова функции Python из Java

Сообщение Anonymous »

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

Мои основные требования таковы:
  • вызов должен быть прозрачным в том смысле, что он не должен требовать изменения файла .py просто для того, чтобы его можно было вызывать из Java. Мне может быть предоставлен любой файл Python с некоторыми функциями внутри него. Я должен иметь возможность вызывать любую из этих функций без необходимости изменения файла .py.
  • Я хочу иметь возможность отправлять аргументы обоих примитивных типов (

    Код: Выделить всё

    int, String, float
    и т. д.) или не примитивные типы (

    Код: Выделить всё

    HashMap,ArrayList
    ) из функции Java в Python и получить обратно возвращенный объект (который может иметь примитивные или непримитивные типы) из Python в Java. Я также использую pandas DataFrame и numpy ndarray и, следовательно, также хочу иметь возможность отправлять и получать соответствующие объекты в Java и обратно.
  • Я предпочтительно хочу придерживаться на CPython вместо Jython, потому что мне, возможно, придется использовать более новые библиотеки, которые могут быть недоступны в Jython.
Есть несколько вариантов, которые я могу использовать. нашел в Интернете. Вот некоторые из них:
  • Использовать PythonInterpreter Jython, с помощью которого я могу вызывать функцию 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 — лучший выбор, если я правильно понял все вышеперечисленные подходы. Совершил ли я ошибки, понимая их? И есть ли другой лучший вариант?

Подробнее здесь: https://stackoverflow.com/questions/394 ... -from-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»