Использование Python из Java [дубликат]


Возможный Дубликат:
Интеграция Java Python

У меня есть большая существующая кодовая база, написанная на 100% Java,но я хотел бы использовать Python для некоторых новых разделов. Мне нужно сделать некоторую обработку текста и языка, и я бы предпочел использовать Python и библиотеку, такую как NLTK для этого.

Я знаю о проекте Jython, но похоже, что это представляет собой способ использовать Java и его библиотеки из Python, а не или наоборот - я ошибаюсь?

Если нет, то какой метод лучше всего подходит для интерфейса между Java и Python, чтобы (в идеале) я мог вызвать метод в Python и получить результат, возвращенный в Java?

Спасибо.

7 54

7 ответов:

Я в курсе проекта языка Jython, но похоже, что это представляет собой способ используйте Java и его библиотеки изнутри Питон, а не наоборот раунд-я ошибаюсь на этот счет?

Да, вы ошибаетесь. Вы можете либо вызвать интерпретатор командной строки для запуска кода python с помощью Jyton, либо использовать код python из Java. В прошлом также существовал компилятор python-to-Java, но он был прекращен с Jython 2.2

Я бы написал модуль Python для обработки текста и языка, а затем построил бы небольшой мост в jython, с которым ваша программа java может взаимодействовать. Мост jython будет очень простым, который действительно отвечает только за переадресацию вызовов в модуль python и возвращает ответ из модуля python в модуль java. Jython действительно прост в использовании, и настройка не должна занимать у вас больше 15 минут.

Удачи вам!

Я не думаю, что вы могли бы использовать NLTK от Jython, так как это зависит от Numpy, который не портирован на JVM. Если вам нужен NLTK или любое другое собственное расширение CPython, вы можете рассмотреть возможность использования некоторого механизма IPC для связи между CPython и JVM. Тем не менее, существует проект, позволяющий вызывать CPython из Java, называемый Jepp:

Http://jepp.sourceforge.net/

Обратное (вызов кода Java из CPython) является целью JPype и javaclass:

Sourceforge.net/projects/jpype/

Pypi.python.org/pypi/javaclass/0.1

Я никогда не использовал ни один из этих проектов, поэтому я не могу поклясться в их качестве.

Jython-это реализация Python, работающая на JVM. Информацию о внедрении Python в существующее приложение Java можно найти в руководстве пользователя .

Я не знаю, в какой среде вы работаете, но имейте в виду, что смешивание языков в одном приложении может быстро привести к беспорядку. Я рекомендую создавать интерфейсы Java для представления операций, которые вы планируете использовать, наряду с отдельно упакованными классами реализации, которые обертывают код Python.

По моему мнению, Джайтон-это именно то, на что вы смотрите.
Это реализация Python в JVM; таким образом, вы можете свободно обмениваться объектами и, например, наследовать от класса Java (с некоторыми ограничениями).

Обратите внимание, что его главная сильная сторона (будучи поверх JVM) также является его главным недостатком, потому что он не может использовать все (C)расширения Python, написанные на C (или на любом другом компилируемом языке); это может повлиять на то, что вы хотите сделать с ним. ваша обработка текста.

Для получения дополнительной информации о том, что такое Jython, его потенциале и его ограничениях, я предлагаю вам прочитать Jython FAQ.

Просто запустите интерпретатор Python как подпроцесс из Java.

Напишите свою функциональность Python как правильный скрипт, который читает из stdin и записывает в stdout.

Используйте класс Java Runtime для создания подпроцесса, который запускает ваш скрипт Python. Это очень просто сделать и обеспечивает очень чистый интерфейс.


Edit

import simplejson
import sys
for request in sys.stdin.readlines():
    args = simplejson.loads( request )
    result = myFunction( args['this'], args['that'] )
    sys.stdout.writeline( simplejson.dumps( result ) + "\n" )
Интерфейс прост, структурирован и имеет очень низкие накладные расходы.

Не забудьте сначала проверить у тех, кто платит за разработку, что они в порядке с кодовой базой, нуждающейся в разработчике, который знает и Python, и Java отныне, и другие эффекты стоимости и ремонтопригодности, которые вы, несомненно, уже учли.

См.: http://www.acm.org/about/se-code 1.06, 2.03, 2.09, 4.03, 4.05, 6.07