Crear un paquete Debian (.deb) de un programa en Python (.py)

Nota

Este post no es el original, sino una migración de Wordpress a Nikola. Si no se visualiza correctamente, podés ir al original (en Wordpress) haciendo click aquí

image0

Siempre quise aprender a hacer paquetes Debian porque muchas veces les quería pasar mis programas a mis amigos y se quejaban que tenían que instalar muchas dependencias o quizás eso me decían a mí para no correr mis programas en sus máquinas.

También porque evitás todo tipo de explicación de cómo se instala, cuál es el .py que se debe ejecutar, que versión de Python, y muchas otras cosas. Además que queda lindo ya que podemos hacer que lo ponga en el Menú K en KDE o Gnome en su correspondiente panel de aplicaciones indicándole cuál va a ser su ícono y demás.

Hace mucho tiempo me puse a investigar e incluso me leí toda la guía de desarrolladores de Debian la cuál en ese momento no me sirvió, quizás porque no la entendí o porque no estaba directamente relacionada con Python (y yo recién empezaba con ambos).

El 9 de Junio de éste año se llevó a cabo la 2da Jornada de Python en Santa Fé en la que vino gente de otros lados del país y tuve la posibilidad de alojar a dos chicos en mi casa; Héctor Sánchez y Hugo Ruscitti de Buenos Aires, a los cuales aprovechépara preguntarle de todo tipo de cosas :D sobre en lo que yo estaba fresquito y ellos ya tenían un poco más de experiencia.

Cómo Hugo se dedicaba a hacer juegos para una distribución de Debian y había cosas que hacía en Python le pregunté cómo hacer un paquete de uno de mis juegos (Tweety Finger) y me ayudó a crearlo en ese momento, explicándome que era lo básico para hacerlo y siguiendo de ejemplo un paquete existente. Existen muchas opciones para crear un paquete Debian, como por ejemplo los nombres genéricos en los distintos idiomas, los cuales son tediosas de indicar e incluso ni los sabemos; y a mí me interesaba que sean de fácil instalación mis programas.

Lo más recomendable es leerla guía expuesta arriba o buscar información en Google de la estructura de los paquetes de Debian, para saber y comprender cuáles son las opciones mínimas para que cumpla los estándares de Debian y poder ser redistribuido e incluso incluído en alguna de las distribuciones de Debian y sus derivadas.

Lo primero que hice fué abrir una terminal y entrar al programa mc y buscar en la carpeta /var/cache/apt/archives algún paquete que halla descargado anteriormente para basarme en su estructura y ver cómo estaban configurado los distintos archivos. Hoy tenía que hacer otro paquete y siempre me olvido cómo se hacen, asique agarré de ejemplo el Kate.

Lo más importante a tener en cuenta es la estructura de directorios del paquete y el archivo DEBIAN/control. Éste es un archivo de texto que se utilizar para indicar las dependecias del paquete, una descripción corta, una larga, el nombre, la versión, etc.

Explico la estructura del paquete que vamos a crear con un ejemplo, el del paquete que acabo de crear recién para el juego Twisted Zombie.

DEBIAN/
    control
usr/
    share/
        applications/
            twisted-zombie.desktop
        pixmaps/
            twisted-zombie-icon.png
        twisted-zombie/
            data/
            lib/
            COPYING
            README.txt
            create-upload.py
            pyweek-upload.py
            run_game.py

El archivo DEBIAN/control es que el expliqué anteriormente. La estructura /usr/share/[...]indica dónde se va a copiar el contenido de ésta; por ejemplo el archivo run_game.py quedará instalado en nuestro sistema con en la ruta /usr/share/twisted-zombie/run_game.py.

El otro archivo importante es /usr/share/applications/twisted-zombie.desktop ya que en este indicamos en dónde se va a ubicar en el Menú K, que órden debe ejecutarse cuando se llame, qué ícono tendrá, etc. Se pueden ver los archivos de este ejemplo en los links de cada uno de estos (arriba).

En los archivos fuente (.py) que carguemos archivos externos, como ser imágenes, sonidos etc; debemos hacer un change dir a la nueva ubicación de nuestro programa (en este caso/usr/share/twisted-zombie) agregando la línea:

os.chdir("/usr/share/twisted-zombie")

Para que al ser llamado desde cualquier otra ruta el programa siempre se posicione dónde él sabe que tiene los archivos a cargar.

Una vez creada la estructura anteriormente mostrar y configurado los archivos mencionados a gusto, se puede ejecutar este comando para crear el paquete:

$ dpkg --build twisted-zombie/ twisted-zombie-1.0_all.deb

Si la estructura de la carpeta twisted-zombie/ está mal formada, el comando nos informa de esto, incluso también si al archivo controlno le dejamos un espacio en blanco en la última línea, y demás.

El nombre que se le da es de la forma <nombre-paquete>-<version>_<arquitectura>.deb.Luego para probar que esto funciona correctamente lo instalamos:

$ dpkg -itwisted-zombie-1.0_all.deb

Si algo salió mal, por ejemplo, al hacer click en el Menu K no aparece nuestro programa basta con buscar el error en el archivo twisted-zombie.desktop, desintalar el programar, crear el paquete e instalarlo nuevamente. Para desintalarlo lo hacemos cómo si fuera cualquier otro paquete:

$ sudo apt-get removetwisted-zombie

Espero que sirva esto y no haberme olvidado ningún paso del proceso, parece complicado, pero es algo simple; como todo, al principio es complicado o por lo menos parece. Pero al poder ver cómo están construidos los demás es fácil guiarse. Incluso se puede usar un paquete más chico de ejemplo que el Kate.

Cualquier cosa que no se entienda o no quede bien en claro comenten y depaso me hacen seguir estudiando ;)

Comentarios

Comments powered by Disqus