Veröffentlichung von JPype 1.0, Bibliotheken für den Zugriff auf Java-Klassen aus Python

Verfügbar Schichtfreigabe JPype 1.0, wodurch Python-Anwendungen vollen Zugriff auf Klassenbibliotheken in der Java-Sprache haben. Mit JPype von Python können Sie Java-spezifische Bibliotheken verwenden, um Hybridanwendungen zu erstellen, die Java- und Python-Code kombinieren. Im Gegensatz zu Jython wird die Integration mit Java nicht durch die Erstellung einer Python-Variante für die JVM erreicht, sondern durch die Interaktion auf der Ebene beider virtueller Maschinen unter Nutzung des gemeinsamen Speichers. Der vorgeschlagene Ansatz ermöglicht nicht nur eine gute Leistung, sondern bietet auch Zugriff auf alle CPython- und Java-Bibliotheken. Projektnummer vertrieben von lizenziert unter Apache 2.0.

Wichtigste Änderungen:

  • JChar wird als Rückgabetyp unterstützt. Aus Kompatibilitätsgründen erbt JChar von „str“ und implementiert eine implizite Konvertierung in „int“. Daher führt es Schecks in Verträgen durch. Dies bedeutet jedoch, dass er in Python nicht mehr als numerischer Typ betrachtet wird und isinstance(c, int) daher als False ausgewertet wird, was mit den Java-Typkonvertierungsregeln übereinstimmt.
  • Es wurde ein Operator zum Umwandeln eines Java-Typs eingeführt, Type@obj (@ ist ein Python-Operator für das innere Produkt; Java hat keinen).
  • Notation zum Erstellen von Java-Arrays hinzugefügt. Typ[s1][s2][s3] für Arrays mit fester Größe, Typ[:][:][:] für Arrays, die später erstellt werden.
  • Mit @FunctionalInterface können Sie mit __call__ Java-Funktoren aus Python-Objekten erstellen.
  • Veralteter JIterator, Verwendung von JException als Factory, get_default_jvm_path und jpype.reflect entfernt.
  • Standardmäßig werden Java-Strings nicht in Python-Strings konvertiert.
  • Python hat „__int__“ veraltet, sodass implizite Umwandlungen zwischen Ganzzahl- und Gleitkommatypen einen TypeError erzeugen.
  • Die Verwendung von JException ist veraltet. Um alle Ausnahmen abzufangen oder zu überprüfen, ob ein Objekt ein Java-Ausnahmetyp ist, verwenden Sie java.lang.Throwable.
  • Kaskadierende Ursachen von Java-Ausnahmen werden jetzt in Python-Stack-Frames widergespiegelt.
  • JString ist veraltet. Um einen Java-String zu erstellen oder zu überprüfen, ob ein Objekt vom Typ Java-String ist, verwenden Sie java.lang.String.
  • Repr-Methoden wurden in Java-Klassen aktualisiert.
  • java.util.List führt Verträge für Sammlungen.abc.Sequence und Sammlungen.abc.MutableSequence aus.
  • java.util.Collection führt den Vertrag fürcollections.abc.Collection aus.
  • Java-Klassen sind privat und lösen TypeError aus, wenn sie aus Python erweitert werden.
  • Behandeln Sie Control-C vorsichtig. Frühere Versionen stürzen ab, wenn Java ein Control-C-Signal verarbeitet, da Java während des Aufrufs beendet wird. JPype löst jetzt eine InterruptedException aus, wenn es von Java zurückkehrt. Control-C wirft keine großen Java-Prozeduren aus, wie sie derzeit implementiert sind, da Java hierfür kein spezielles Tool hat.

Als nächstes wurde eine Korrekturversion 1.0.1 erstellt, die Änderungen hinzufügte, um Probleme mit der Python-Version 3.8.4 zu umgehen. Python hat die Logik bezüglich der Verwendung von „__setattr__“ für „object“ und „type“ geändert und verhindert, dass es zum Ändern abgeleiteter Klassen verwendet werden kann. Die Fehlerprüfung wurde ebenfalls von der Methode „__setattr__“ delegiert, daher sollten die Ausnahmetypen in einigen Angemessenheitsprüfungen entsprechend aktualisiert werden.

Source: opennet.ru

Kommentar hinzufügen