Llançament de JPype 0.7.2, biblioteques per accedir a classes Java des de Python

Disponible alliberament de la capa JPype 0.7.2, que us permet organitzar l'accés complet de les aplicacions Python a les biblioteques de classes Java. Amb JPype de Python, podeu utilitzar biblioteques específiques de Java per crear aplicacions híbrides que combinen codi Java i Python. A diferència de Jython, la integració amb Java no s'aconsegueix mitjançant la creació d'una variant de Python per a la JVM, sinó mitjançant la interacció a nivell d'ambdues màquines virtuals utilitzant memòria compartida. L'enfocament proposat permet no només aconseguir un bon rendiment, sinó que també proporciona accés a totes les biblioteques CPython i Java. Codi del projecte Distribuït per amb llicència d'Apache 2.0.

Principals canvis:

  • Les excepcions llançades al codi C++ i Java ara proporcionen una pila d'excepcions quan es produeix una excepció al codi Python. Així, per obtenir informació sobre la pila d'excepcions, ja no cal que crideu a stacktrace().
  • La velocitat de retorn de trucada s'ha triplicat.
  • Augmenta significativament (per ordres de magnitud) la velocitat de transmissió
    buffers numpy de matrius multidimensionals. Les primitives multidimensionals passen còpies de només lectura creades dins de la JVM amb un disseny C contigu.

  • Tots els elements interns exposats s'han substituït per implementacions de CPython i els símbols __javaclass__, __javavalue__ i __javaproxy__
    esborrat. S'ha afegit una ranura Java dedicada a tots els tipus de CPython que hereten dels tipus de classe jpype. Totes les taules privades s'han mogut a CPython. Els tipus Java ara han d'heretar de la metaclasse JClass, que utilitza ranures de tipus. Els mixins per a les classes base de Python no es permeten. Els tipus són Object, Proxy, Exception, Number i Array i hereten directament de les implementacions internes de CPython.

  • Traçament millorat i gestió d'excepcions.
  • Les porcions de matriu es processen ara com a vistes que admeten l'escriptura a l'original, com ara una matriu numpy. Per al tall de matriu, es proporciona suport per establir i recuperar valors en passos (slice (inici, aturada, pas)).
  • Ara les matrius admeten "__reversed__".
  • Les matrius Java ara admeten l'API de memoryview i eliminen la dependència de numpy per passar el contingut del buffer.
  • Numpy ja no és una dependència (extra) i la transferència de memòria a numpy està disponible sense compilar amb suport numpy.
  • JInterface està dissenyat com una metaclasse. Utilitzeu isinstance (cls, JInterface) per comprovar si hi ha interfícies.
  • S'han afegit els TLD que falten "mil", "net" i "edu" a les importacions per defecte.
  • Missatges d'error millorats per a UnsupportedClassVersion durant l'inici.
  • java.util.Map ara llança un KeyError si no es troba l'element. Els valors que són nuls encara retornen Cap com s'esperava. Utilitzeu get() si voleu tractar les claus buides com a Cap.
  • S'ha eliminat java.util.Collection, ja que estranyament es sobrecarrega entre remove(Object) i remove(int) a les llistes. Utilitzeu el mètode Java remove() per accedir al comportament natiu de Java, però es recomana l'emissió de tipus per al control de la sobrecàrrega.
  • java.lang.IndexOutOfBoundsException ara es pot detectar mitjançant la classe d'excepció IndexError quan s'accedeix als elements java.util.List.

Font: opennet.ru

Afegeix comentari