Subir un paquete con Python a tu PPA.

Este es uno de los capítulos del tutorial Como crear un repositorio PPA para distribuir tus aplicaciones. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

En el capítulo anterior de esta serie vimos como subir un paquete a tu PPA. En este nuevo capítulo de la serie, vamos a hacerlo utilizando aprovechando las facilidades que nos brinda Python a la hora de crear paquetes. Vamos a crear un paquete con Python.

Si te manejas bien con Python, probablemente, la idea de utilizarlo para crear tus propios paquetes y subirlos a tu repositorio seguro que te parece interesante, y lo cierto es que es cómodo, sencillo y muy práctico. Si no utilizas Python con asiduidad, o si no lo utilizas nada, lo primero recomendarte que le des una oportunidad, y en segundo lugar, como verás en este artículo, este sistema de instalación es tan sencillo de utilizar como el que vimos en el artículo anterior, pero tienes todas las herramientas que te proporciona Python.

Como crear un repositorio. Subir un paquete con Python a tu PPA. Portada.

Crear un paquete con Python

Un paquete sencillo… ahora con Python

Al igual que hicimos en el capítulo anterior, vamos a crear un paquete extremadamente sencillo. Tan sencillo que lo único que contendrá será un icono. Este icono se instalará en el directorio donde están todos los iconos en nuestra distribución.

Al igual que vimos en el artículo anterior, verás, que instalar un archivo o 100, es exactamente igual, con lo que tampoco lo vamos a complicar mas. Sin embargo, si que te indicaré como puedes hacer para añadir mas archivos o como hacerlo de una forma sencilla.

La estructura de archivos de nuestro paquete con Python

Al igual que hice en el artículo anterior, he creado un repositorio en GitHub, con la estructura y archivos necesarios para crear el paquete con Python. Este repositorio, lo puedes utilizar como punto de partida para crear tu propio paquete. Para ello, tan solo tienes que clonar el repositorio en tu equipo, ejecutando la siguiente orden,

git clone https://github.com/atareao/unicono-python.git

Una vez clonado, lo que tendrás que hacer, necesariamente, es modificar los archivos para que se ajusten al paquete que quieres crear.

La información DEBIAN

La estructura de archivos que necesitamos es exactamente la que vimos en el artículo sobre como subir un paquete a tu PPA.

Mantendremos igual los archivos source/format, changelog, compat. Eliminaremos install, aunque también es posible mantenerlo, pero con cuidado de no pisar nuestros propios archivos. Y modificaremos los siguientes,

  • rules. Tenemos que reemplazar la línea dh $@ por dh $@ --with python3 --buildsystem=pybuild. Esto lo haremos así, en el caso particular de querer hacer nuestra instalación con Python 3. Si lo quieres hacer con Python2, simplemente es cambiar donde dice python3, por python2.
  • control. Hay quedemos modificar las dependencias necesarias para construir el paquete. En este caso cambiaremos la línea Build-Depends: debhelper (>= 10) por Build-Depends: debhelper (>= 10), python3, python3-distutils-extra.

Con esto ya tenemos todos los cambios necesarios correspondientes al directorio debian.

Setup.py

Además de las modificaciones indicadas en el apartado anterior, hay que añadir un archivo adicional en el directorio principal para poder crear nuestro paquete con Python. Este archivo es setup.py. Es un script, generalmente muy simple, aunque evidentemente, lo puedes hacer lo complicado que quieras.

Veamos lo mínimo necesario que tiene que tener nuestro script setup.py. Reproduzco a continuación el contenido del archivo, del paquete unicono-python que está disponible en GitHub,

#!/usr/bin/env python3
#
from distutils.core import setup

setup(name='unicono-python',
      version='0.0.1',
      author='Lorenzo Carbonell',
      author_email='lorenzo.carbonell.cerezo@gmail.com',
      url='https://www.atareao.es',
      license='GPLv3',
      data_files=[('/usr/share/icons/hicolor/scalable/apps',
                  ['data/ubuntu.svg'])])

Ya está. Sencillo, ¿no te parece?. Como puedes ver, importamos la función setup de distutils.core que hemos requerido en el archivo control de debian, y le asignamos los parámetros que necesitamos. Todavía lo podemos hacer mas simple todavía, indicando solo el nombre del paquete, la versión y los archivos, sin embargo, ¿que menos que poner la autoría y la licencia?.

En data_files indicamos los archivos a incluir, como secuencia de (directorio, archivos). Siempre podemos añadir un lista de archivos. Así por ejemplo, si tuviéramos varias imágenes SVG, la línea data_files sería,

data_files=['(/usr/share/icons/hicolor/scalable/apps', glob.glob('data/*.svg')]

Siendo necesario añadir la dependencia glob en las importaciones, al comienzo de nuestro script.

Crear el paquete con Python

Para crear nuestro paquete con Python procederíamos igual que en el artículo de subir un paquete a tu ppa. Es decir, ejecutamos la siguiente orden, en el directorio superior a debian, y sustituyendo TUCLAVE por el ID de la clave.

debuild -S -sa -kTUCLAVE

Una vez ejecutada la orden anterior, y si todo ha ido como esperamos, se habrán creado una serie de paquetes, y tal y como hicimos en el capítulo anterior, lo subiremos a nuestra PPA,

dput ppa:lorenzoatareao/mi-primer-repositorio unicono-python_0.0.1-0extras17.04.3_source.changes

Siendo el resultado que deberá aparecer en nuestra terminal, el que ves a continuación,

Checking signature on .changes
gpg: Firmado el mar 03 oct 2017 20:07:22 CEST
gpg:                usando RSA clave CEF5DEE0DE5CBBE5
gpg: Firma correcta de "Lorenzo Carbonell <atareao@atareao.es>" [absoluta]
Good signature on /datos/Sync/Programacion/Ubuntu/unicono-python_0.0.1-0extras17.04.3_source.changes.
Checking signature on .dsc
gpg: Firmado el mar 03 oct 2017 20:07:13 CEST
gpg:                usando RSA clave CEF5DEE0DE5CBBE5
gpg: Firma correcta de "Lorenzo Carbonell <atareao@atareao.es>" [absoluta]
Good signature on /datos/Sync/Programacion/Ubuntu/unicono-python_0.0.1-0extras17.04.3.dsc.
Uploading to ppa (via ftp to ppa.launchpad.net):
  Uploading unicono-python_0.0.1-0extras17.04.3.dsc: done.
  Uploading unicono-python_0.0.1-0extras17.04.3.tar.xz: done.
  Uploading unicono-python_0.0.1-0extras17.04.3_source.changes: done.
Successfully uploaded packages.

Conclusión

Como ves este sistema de crear un paquete con Python es muy similar al que vimos anteriormente. Y además es igual de sencillo, o por lo menos muy similar.

Sin embargo, indicarte que es un procedimiento básico, y que se va complicando conforme queremos añadir mas y mas módulos y complementos. Por ejemplo, si queremos que nuestro paquete esté traducido a varios idiomas.

Pero, por otro lado, la ventaja es que, una vez tienes el script creado, lo puedes utilizar para otros paquetes de la misma manera, cambiando solo el contenido del mismo.

Insisto, en que si tu paquete es un módulo de Python, esta es la manera mas práctica de crearlo. Sin embargo, para un paquete de iconos o fondos de pantalla, la solución, óptima y mas simplificada es la que vimos en el capítulo anterior.

En el próximo capitulo de la serie, el último, veremos como crear un paquete para Vala.


Más información,

6 comentarios en “Subir un paquete con Python a tu PPA.

  1. Hola atareao, gracias por esta serie de tutoriales, en mi caso me cuesta un poco mas entender estos últimos tutoriales pues no se nada o casi nada de lenguajes de programación; así que me gustaría saber si yo teniendo mis aplicaciones .deb descargadas puedo subirlas a mi ppa y hacer las instalaciones de esas aplicaciones? sería muy bueno la verdad y así no andar añadiendo cantidades grandes de ppa para instalar los programas y solo instalarlas desde mi repositorio personal.

    1. Hola Jesús,
      Creo que si que se podría hacer, pero no partiendo del código fuente sino exclusivamente del compilado. De cualquier forma, es mejor siempre partir de los PPA de los desarrolladores, porque de otra forma te puedes quedar con una versión con problemas de seguridad.
      De cualquier forma, si sigues interesado en subir paquetes deb a un repositorio, me lo dices, y vemos de hacer una entrega adicional con esto.
      Un saludo.

      1. De verdad que estaría encantado de que hicieras una entrega adicional para subir los paquetes .deb. Entiendo los problemas de seguridad que esto conlleva al no instalar de los PPA oficiales, pero a medida que vayan saliendo actualizaciones de los programas puedo actualizar el PPA con las nuevas versiones de los .deb.

  2. Hola Atareado, muy buena serie de post sobre como crear y publicar paquetes debian en un PPA, gracias a estos y a tus aportes pude mejorar una aplicación que me gusta mucho, pero que le faltaban características a mi parecer. Así publiqué un ecualizador para pulse audio que permite guardar, exportar e importar (incluso por drag and drop) presets de los ajustes del ecualizaror y otros detalles. Gracias por compartir estos post. Este es mi PPA https://launchpad.net/~lamedina/+archive/ubuntu/comoinstalarlinux

    Saludos desde México.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *