The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Релиз JPype 0.7.2, библиотеки для доступа к Java-классам из Python

29.02.2020 12:11

Доступен релиз прослойки JPype 0.7.2, позволяющей организовать полный доступ Python-приложений к библиотекам классов на языке Java. При помощи JPype из Python можно использовать специфичные для Java библиотеки, создавая гибридные приложения, сочетающие код на Java и Python. В отличие от Jython, интеграция с Java достигается не через создание варианта Python для JVM, а через взаимодействие на уровне обеих виртуальных машин, используя разделяемую память. Предложенный подход позволяет не только добиться хорошей производительности, но и предоставляет доступ ко всем библиотекам CPython и Java. Код проекта распространяется под лицензией Apache 2.0.

Основные изменения:

  • Исключения, выброшенные в C++ и Java коде, теперь предоставляют стек исключений при возникновении исключения в коде на Python. Таким образом, чтобы получить информацию о стеке исключений отныне не нужно больше вызывать stacktrace().
  • В три раза увеличена скорость возврата при вызовах.
  • Существенно (на порядки) увеличена скорость передачи в numpy буферов многомерных массивов. Многомерные примитивы передают доступные только для чтения копии, созданные внутри JVM с непрерывной раскладкой C.
  • Все выставляемые внутренние компоненты заменены на реализации из CPython, а символы __javaclass__, __javavalue__ и __javaproxy__ удалены. Ко всем типам CPython, унаследованным от типов класса jpype, добавлен выделенный Java-слот. Все приватные таблицы перенесены в CPython. Java-типы теперь должны наследоваться от метакласса JClass, который использует слоты типов. Примеси для базовых классов Python не допускаются. Типы Object, Proxy, Exception, Number и Array и наследуются напрямую от внутренних реализаций CPython.
  • Улучшена трассировка и обработка исключений.
  • Срезы массивов (Array slices) теперь обрабатываются в виде представлений, поддерживающих обратную запись в оригинал, такой как массив numpy. Для срезов массивов обеспечена поддержка установки и получения значения с шагом (slice(start, stop, step)).
  • В массивах реализована поддержка "__reversed__".
  • В Java-массивах обеспечена поддержка API memoryview и убрана зависимость от numpy для передачи содержимого буфера.
  • Numpy теперь не является зависимостью (extra) и передача памяти в numpy доступна без компиляции с поддержкой numpy.
  • JInterface оформлен в виде мета-класса. Используйте isinstance(cls, JInterface) для проверки на интерфейсы.
  • В импорты по умолчанию добавлены пропущенные TLD "mil", "net" и "edu".
  • Во время запуска улучшены сообщения об ошибках для UnsupportedClassVersion.
  • java.util.Map теперь выдаёт KeyError, если элемент не найден. Значения, которые null, по-прежнему возвращают None как и ожидается. Используйте get(), если пустые ключи требуется обрабатывать как None.
  • Удалён java.util.Collection, так как он странно перегружается между remove(Object) и remove(int) на List-ах. Используйте Java-метод remove() для доступа к оригинальному Java-поведению, но приведение типа строго рекомендуется для управления перегрузкой.
  • java.lang.IndexOutOfBoundsException теперь может быть пойман с помощью класса для исключений IndexError при доступе к элементам java.util.List.


  1. Главная ссылка к новости (https://github.com/jpype-proje...)
  2. OpenNews: Релиз JPype 0.7, библиотеки для доступа к Java-классам из Python
  3. OpenNews: Релиз PyPy 7.3, реализации Python, написанной на языке Python
  4. OpenNews: Выпуск компилятора Nuitka 0.6.6. Прекращение поддержки Python 2.7 перенесено на апрель
  5. OpenNews: Ценой перевода Mercurial на Python 3 может стать шлейф непредвиденных ошибок
  6. OpenNews: Inlinec - новый способ использования Си-кода в Python-скриптах
Автор новости: Аноним
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/52456-jpype
Ключевые слова: jpype, java, python
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (48) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, A.Stahl (ok), 19:30, 29/02/2020 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     
  • 1.2, Аноним (-), 19:33, 29/02/2020 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +5 +/
     

  • 1.5, Аноним (5), 20:00, 29/02/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Нужная вещь, иногда софт бывает только в жабе реализован. Ну и опять же, это удобно.
     
     
  • 2.31, Аноним (31), 12:05, 01/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, во-первых, это красиво.
     
     
  • 3.35, Аноним (-), 13:11, 01/03/2020 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Ну, во-первых, это красиво.

    "Имела жаба гадюку" [x] implemented!

     

  • 1.6, Аноним (6), 20:07, 29/02/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > библиотеки для доступа к Java-классам из Python

    Где-то я такое уже видел. О, точно: JavaScript с самого начала существования предоставлял бесшовную интеграцию с Java. Другое дело, что от этого потом отказались, но пихону еще только предстоит перепройти это приключение, в котором оказался JavaScript в 1990-ых.

     
     
  • 2.7, Аноним (5), 20:12, 29/02/2020 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Тут обратная ситуация. Емнип жабоскрипт изначально был субсетом жабы, тут же скорее возникло требование интеграции из-за больших объёмов уникальных продуктов на обоих языках. Интересно, а с андроидом оно интегрируется?
     
     
  • 3.8, Аноним (4), 20:17, 29/02/2020 [^] [^^] [^^^] [ответить]  
  • +6 +/
    > жабоскрипт изначально был субсетом жабы

    никогда не был, хватит трындеть

     
     
  • 4.9, Аноним (5), 20:33, 29/02/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Так принято считать, да. Однако. они появились в одно время и я читал, что жс всю жизнь был рипофом жабки, да и назначение у них весьма схожее. Отсюда потом и родились интероперабельные реализации (не помню, как назывались, да и не интересно).
     
  • 4.10, A.Stahl (ok), 20:34, 29/02/2020 [^] [^^] [^^^] [ответить]  
  • +/
    А мне какой-то явист рассказывал, что в ранних версиях (а может и сейчас, не помню) ЯваСкрипта были зарезервированы все Ява команды. Видимо с расчётом на "потом доделаем"
     
     
  • 5.14, Lex (??), 21:32, 29/02/2020 [^] [^^] [^^^] [ответить]  
  • +/
    жЫЭска была совершенно отдельной штуковиной. Однако её название - результат работы маркетологов( жаба тогда была весьма популярна и жабаскрипт похожим названием помышлял переманить к себе часть народу и урвать часть популярности ).

    А то явись, наверное, рассказывал о мозиловском js-движке( Rhino ), который написан полностью на жабе и вполне мб там нечто подобное имелось.

    Всё-таки, это были темные и страшные времена, когда народ всерьёз думал, что жаба захватит мир

     
     
  • 6.18, Аноним (18), 21:46, 29/02/2020 [^] [^^] [^^^] [ответить]  
  • +/
    но ведь блин захватила. Вёдра на яве, IDE к ним - тоже, разрабатывать - невозможно.
     

  • 1.11, анонимно (?), 20:40, 29/02/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    надо наконец то реализовать синтаксис python в jvm и будет полная любовь и согласие )
    Два корифея ООП на самом деле java и python.
     
     
  • 2.12, Анонимм (??), 21:07, 29/02/2020 [^] [^^] [^^^] [ответить]  
  • +/
    GraalVM?
     
     
  • 3.16, Аноним (18), 21:41, 29/02/2020 [^] [^^] [^^^] [ответить]  
  • –2 +/
    GraalVM. На самом деле у меня есть фреймворк, сглаживающий различия между JPype и GraalPython, но никак руки не доходят его выделить в отдельную либу и опубликовать.
     
     
  • 4.32, Аноним (31), 12:06, 01/03/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Может подсознание тебе просто говорит: "Не надо".
     
     
  • 5.36, Аноним (18), 14:04, 01/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    К сожалению надо Альтернатива - переписать как минимум 6 нужных немаленьких либ... большой текст свёрнут, показать
     
     
  • 6.37, Аноним (18), 14:08, 01/03/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    *чтобы сделать JPipe ненужной?
     
  • 2.41, Аноним (41), 09:44, 02/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    В питоне до сих пор не могут разобраться, он функциональный или объектно-ориентированный. Полноценная модель ООП есть в Ruby и JRuby.
     

  • 1.13, Аноним (13), 21:08, 29/02/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Нужная вещь в хозяйстве
     
     
  • 2.29, псевдонимус (?), 03:47, 01/03/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ага. Как бычий хрен в кулацком хозяйстве.
     
     
  • 3.34, YetAnotherOnanym (ok), 12:31, 01/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Если "кулак" (т.е. зажиточный крестьянин, использующий труд наёмных работников, т.н. "батраков") достаточно умён и дальновиден, чтобы самостоятельно вести племенную работу, то бычий хрен в его хозяйстве действительно необходим.
     
     
  • 4.42, Аноним (41), 09:47, 02/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    >>  "кулак" (т.е. зажиточный крестьянин, использующий труд наёмных работников, т.н. "батраков")

    Не совсем так. Для того, чтобы заслужить такое звание, было необходимо быть хамовитым, агрессивным и наносящим увечья другим крестьянам. Простые зажиточные крестьяне, даже с наёмными работниками, "кулаками" не были.

     
     
  • 5.45, пох. (?), 12:24, 02/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Не совсем так. Для того, чтобы заслужить такое звание, было необходимо быть хамовитым,
    > агрессивным и наносящим увечья другим крестьянам.

    иначе они нанесут увечья тебе, и корову уведут.

     
     
  • 6.51, Аноним (51), 08:18, 03/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > иначе они нанесут увечья тебе, и корову уведут.

    Куда они её уведут при общинном то укладе жизни?

     
  • 4.44, пох. (?), 12:23, 02/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Не хотел бы тебя огорчать, но сушеным бычьим хреном просто х/ячили батраков - он не хуже резиновой дубинки работает.

    А племенную работу вели на рынке - покупая новую корову взамен зарезаемой на мясо старой.
    Бычки по осени - на мьясо, кормить их зимой незачем, а ягель копытить они почему-то не хотят.

     
     
  • 5.48, YetAnotherOnanym (ok), 21:04, 02/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    А рождались эти коровы, до того как быть проданными на рынке - где? Наверное, всё-таки у кого-то, кто владел коровой-мамой и организовал ей вязку с тем самым быком, чей хрен, в силу этого, имел таки определённую ценность в хозяйстве.
     
  • 4.46, myhand (ok), 18:05, 02/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Если "кулак" (т.е. зажиточный крестьянин, использующий труд наёмных работников

    Да никакой это не "зажиточный крестьянин", а обыкновенный сельский ростовщик.  Если лень учить историю - читайте хоть русскую классику.

     

  • 1.15, Lex (??), 21:35, 29/02/2020 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +/
     

     ....ответы скрыты (2)

  • 1.19, nelson (??), 22:54, 29/02/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    >> полный доступ Python-приложений к библиотекам классов на языке Java

    походу это такой тонкий троллинг качества готовых решений на пистоне

     
     
  • 2.22, Аноним (18), 23:43, 29/02/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Хромает не только качество, но и покрытие. У всех языков так, ибо большинство софта написано на конкретном языке без транспиляции в твой.
     

  • 1.20, Аноним (20), 23:02, 29/02/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну а что, бизнесслогика на Java, а морда на PyQt. Поскольку биндинг к Qt для Java заброшен лет 10 назад.
     
     
  • 2.23, Аноним (18), 23:44, 29/02/2020 [^] [^^] [^^^] [ответить]  
  • +/
    У джавы свой GUI тулкит.
     
     
  • 3.43, Аноним (43), 10:29, 02/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    На который смотреть не хочется.
     
  • 2.39, Аноним (-), 18:01, 01/03/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тогда уж сразу на электроне. Трэшевать так уж по полной, что за полумеры?!
     

  • 1.21, Аноним (21), 23:16, 29/02/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Вместо одной VM память и ресурсы будут жрать сразу две.

    Электрон давится от зависти в углу...

     
     
  • 2.24, Аноним (18), 23:46, 29/02/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Живые мейнтейнеры портов нужных либ на питон сожрали бы гораздо больше.
     
  • 2.33, Аноним (33), 12:20, 01/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ждём биндинг JavaScript -> Python -> Java
     
  • 2.38, Аноним84701 (ok), 14:40, 01/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Вместо одной VM память и ресурсы будут жрать сразу две.

    У питона М тянет разве что на мопед.  
    > Электрон давится от зависти в углу...

    Давится захапанной памятью, спешит, а то вдруг кому-то еще достанется?

     
     
  • 3.40, Аноним (-), 18:05, 01/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ну не жабе же с гадюкой оставлять, право?!
     

  • 1.25, Анонас (?), 23:53, 29/02/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Имя им легион
    https://talvi.net/a-brief-overview-of-python-java-bridges-in-2020.html
     
     
  • 2.30, Анонос (?), 09:33, 01/03/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    JPype - самая удобная. Просто берешь, подключаешь либу
    и просто дергаешь функции.
     

  • 1.47, Аноним (47), 19:57, 02/03/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    JPype штука может и удобная, но жутко тормозная. Есть менее известная но более годная вешь - JCC из pylucene. Конечно, скрещивать жабу и гадюку богомерзко, но если знаете толк в извращениях - почему бы и нет. Вот у нас в далёком 2008 году были 32 битные виндовзсерверы и костыль на асме, который в адресное пространство процесса сначала JVM грузил, чтобы оно отожрало свои 1.6 гига оперативки, а потом уже - питон. Иначе яве больше гигабайта не доставалось.
     
     
  • 2.49, Аноним (18), 22:43, 02/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Клёвая штука ... для C++ программ. Спасибо.

    >но жутко тормозная.

    А сам питон не жутко тормозной? ИМХО для питона для каждой либы компилять ctypes-обёртку не очень хорошо. Хотя бы потому, что в любой момент может поменяться как сам питон, так и сама либа.

     
     
  • 3.50, Аноним (47), 23:33, 02/03/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Если бы мы фигачили всё в лоб, конечно, тормозило бы жутко. А если делать правильно - то волнуют совсем другие проблемы. GIL, например. Или всякая срань типа async/await.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру