Sábado, Octubre 21, 2017

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

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

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.

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=Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.',
      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 <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>;" [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 <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.>;" [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: Python Software Foundation

Fuente: atareao

¿Quién está en línea?

Hay 28 invitados y ningún miembro en línea

Contador de Visitas

9006705
Hoy Hoy 799
Ayer Ayer 1516
Esta semana Esta semana 8696
Este mes Este mes 30406
Total de Visitas Total de Visitas 9006705

Día con más
visitantes

10-17-2017 : 1687

Gracias por su visita