Вызов Java из Python: обзор библиотек JCC и JPype
Быстрый и эффективный способ использования JPype
Для внедрения Java в Python-код с помощью JPype выполняются следующие шаги:
Установка JPype:
ShellСкопировать кодpip install JPype1-py3 # Теперь мы готовы к общению Python с Java 🎉.
Запуск JVM:
PythonСкопировать кодfrom jpype import startJVM, getDefaultJVMPath startJVM(getDefaultJVMPath(), "-ea") # JVM успешно активирована! 🚀.
Подключение Java-класса:
Предположим, вы обладаете классом
GrumpyCat
в пакетеcom.petstore
:PythonСкопировать кодfrom jpype import JPackage GrumpyCat = JPackage('com').petstore.GrumpyCat # GrumpyCat теперь в нашей Python-среде 🐱.
Если класс не относится к какому-либо пакету:
PythonСкопировать кодGrumpyCat = JPackage('').GrumpyCat # Отлично, GrumpyCat теперь с нами 🥳.
Теперь класс может выступить в роли:
PythonСкопировать кодgrumpy_cat = GrumpyCat() mood = grumpy_cat.moodToday() print(mood) # Подготовьтесь: вы почувствуете настроение GrumpyCat 🤣.
Не забывайте добавлять ваш Java-класс в переменную среды CLASSPATH
или указывать путь при запуске JVM. Измените moodToday
на нужный вам метод.
Изучите дополнительные варианты: Py4J и Pyjnius
Глубокая интеграция с Py4J
Py4J обеспечивает безграничную интеграцию методов Java в Python, поддерживая последние версии Python.
from py4j.java_gateway import JavaGateway
gateway = JavaGateway() # Открываем связь с Java-средой.
java_rabbit = gateway.jvm.com.Farm.Rabbit()
# Наш Python-змей нашёл друга в мире Java-кроликов! 🐍❤️🐇
Простота использования Pyjnius
Pyjnius — это новое решение для взаимодействия Java и Python, позволяющее работать с Java-классами как с Python-классами.
from jnius import autoclass
autoclass('java.util.LinkedList')
# LinkedList из мира Java только что присоединился к нашей Python-команде! 🥂
Экспертные советы по управлению сложностью и типами данных
Сложность: выбор за вами
Хотя Py4J может затребовать запуск сервера-шлюза, это не должно вас пугать: обширная документация и ясные примеры облегчают процесс. В то же время JPype и Pyjnius требуют от вас управления инициализацией JVM, но взамен предоставляют безшовное взаимодействие после настройки.
Управление жизненным циклом JVM
Не забывайте корректно завершать работу JVM, подходя к этому как к долгу ответственного разработчика.
from jpype import shutdownJVM
shutdownJVM()
# Не позволяйте JVM загрязнять рабочую среду! 🌍💡
Изучите особенности типов данных
С помощью JPype массивы Java преобразуются в массивы numpy, упрощая числовые операции.
import numpy as np
from jpype import JArray, JInt
java_array = JArray(JInt)([1, 2, 3])
numpy_array = np.array(java_array)
# Мы только что превратили Java-массив в numpy-массив. Это наш маленький секрет 🤫.
Выберите подходящий вам инструмент
Выбор между различными Java-Python мостами должен основываться на скорости, удобстве и необходимых библиотеках. Например, для работы с Apache Tika может понадобиться JCC или javabridge.
Визуализация
Вот наш Python-скрипт, который ждет немного ☕ магии Java:
Python 🐍 : "О, как мне хотелось бы Java!" ☕
И наши строители мостов, Py4j и Jython, внимательно выслушали эту просьбу:
| Python-код | <-- 🌉 Jython/Py4j --> | Java-библиотеки |
И вот наш Python усилен силой Java:
java_cup = gateway.jvm.CoffeeCup() # Создаем объект Java
java_cup.fill() # Вызываем Java-метод
# Python говорит: "Java, ты делаешь меня более полноценным." ❤️
Во вселенной Python и Java 🌉 символизирует java-пиджаки 🔥 (Да, пиджаки — это лучший выбор!)
Полезные материалы
- Документация JPype – JPype 1.5.1_dev0 documentation — изучите синергию Python ↔️ Java с JPype.
- Главная страница | Jython — окунитесь в мир Python-Java с Jython.
- Добро пожаловать в Py4J — Py4J — освойте выразительность языка Java в мире Python.
- Oracle Nashorn: новое поколение JavaScript-движка для JVM — узнайте, как Javascript может наслаждаться ароматом Java в JVM.
- Apache Tika – Apache Tika — станьте экспертом в области текстовых и метаданных с Apache Tika.
- Советы JNI | Android NDK | Разработчики Android — в программировании иногда необходимы полезные советы, даже если речь идет о "Python и Java, сидящие на дереве, K-I-S-S-I-N-G".