enchufado
   RSS
#
Portando aplicaciones de PyGTK a PyGi (Programación) 2010-10-05 03:08:28

¿De qué va esto? Para empezar, de Python. Aunque aquí nos centraremos en PyGTK (sobretodo porque no continuará su desarrollo a partir de Gnome 3 inclusive y esto significa renovarse o morir), esto va acerca de portar aplicaciones hechas con librerias intermedias que operan contra GObject (gtk, gdk, webkit...) a GObject Introspection, así que esto también es válido para estas otras API's.

¿Qué es GObject Introspection (enlace y subenlaces de lectura recomendada)? Como reza la propia descripción de la web y del paquete de Debian, es un proyecto que pretende proveer datos de introspección del API de las librerias de C legibles por la computadora.

¿Para qué sirve? Tiene diversas aplicaciones, tales como generación automática de código para bindings (la más interesante), verificación de la API y generación de documentación. Acerca del punto más importante, nos quitamos de en medio los bindings que hemos estado usando hasta ahora (porque los metadatos que tenian los bindings ahora se almacenan directamente en GObject), así que es una capa menos de conflicto y ahora podemos acceder directamente a las librerias de GObject. Asimismo, esto nos permite hacer aplicaciones multi-lenguage entre lenguages de distintos niveles (por ejemplo, C y Python, Java... e incluso Javascript).

¿De dónde partimos? Podemos empezar por esta web. Tenga en cuenta el lector -por si no lo ha notado ya- que vamos a usar como base de operaciones una distribución Debian GNU/Linux Testing (Squeeze en estos momentos), especialmente para cuando se hagan referencias a paquetería y a rutas usadas, dado que pueden ser distintos para otras distribuciones.

¿Qué necesitamos?

  1. Instalamos primero los paquetes gobject-introspection (herramientas para generar y tratar los datos de introspección), python-gobject (los bindings de Python para la biblioteca GObject) y python-gi (módulos que permitiran el enlazado dinámico y la introspección de aplicaciones basadas en GObject). Nota: en un futuro cercano (¿para la 2.26 de python-gobject?), el paquete python-gi desaparecerá y se integrará en python-gobject.
  2. Luego necesitamos los archivos de las API's. Estas definiran aquello que se puede portar a pygi (Python GObject Introspection). Respecto a estas API's, comentar que por un lado tenemos los typelibs (que serian los compilados, que nos interesan para usarlos en nuestras apps) y por otro los girs (que serian los xml's representando los fuentes). A falta de documentación en la materia, estos gir's pueden servirnos como tal para realizar la migración de nuestras apps, como veremos más adelante.

    En Debian, la ruta para encontrar los typelibs es /usr/lib/girepository-1.0/ (para Gtk2) y /usr/lib/girepository-3.0/ (para Gtk3). Para buscar/instalar las API's que tenemos empaquetadas en los repositorios, podemos hacer una búsqueda de los paquetes que empiezan por gir1.0 (para Gtk2) ó gir2.0 (supongo será así para Gtk3). E aquí una búsqueda tipo en packages.debian.org. Si quisiéramos instalar los gir's/xml's (p.ej. porque queremos buscar los métodos o propiedades de un objeto a modo de documentación*), necesitaríamos instalar los paquetes de desarrollo de aquel componente (p.ej. libwebkit-dev en el caso de WebKit).
  3. A continuación, cuando ya tengamos las API's, podemos empezar el proceso de portado de código propiamente. Primero, iremos a cambiar los imports. P.ej. en lugar de realizar el típico import gtk, haríamos un from gi.repository import Gtk en su lugar. Y así con todas aquellas librerías que queramos usar con GObject Introspection (from gi.repository import Gtk, Gdk, WebKit, ...).
  4. Hecho esto, vamos al paso más complicado, que es la migración del resto de código. Dado lo novedoso y verde del asunto, podemos: Cuando el proyecto esté más maduro, saldrá documentación y muy probablemente aflorarán tutoriales y howto's, pero es importante empezar a mirar al futuro, a la par que se apoya el proyecto.

    * Algunas cosas las podemos sacar también con un dir(objeto).

Para ir terminando, comentar que a pesar de que el proyecto (PyGi) refleja últimamente bastante actividad de desarrollo y no esta todavía estabilizado, se insta a los desarrolladores que tengan que portar aplicaciones que empiecen cuanto antes para ayudar a encontrar posibles problemas y ayudar a avanzar y madurar el proyecto. E aquí un comentario reciente sobre versiones para distintas distros (aunque los más avezados, pueden construir binarios a partir de los fuentes).

Respecto a Naufrago!, que ha sido lo que ha motivado este post, comentar que se ha ido migrando el código a PyGi hasta que la versión empaquetada en Debian GNU/Linux Testing lo ha permitido. Ahora hay modificaciones que sólo estan presentes en la versión python-gobject 2.26, así que en mi caso, esperaré a que los mantenedores la tengan lista para continuar. Keep up the good work!


Comentarios (1)


Volver al indice

login, admin, form, register