405 - Python, pip y cuatro paquetes productivos

405 - Python, pip y cuatro paquetes productivos

Python tiene un importante ecosistema de módulos a tu disposición para utilizarlos en tu desarrollo de software de forma sencilla. Desde vídeo a imagen

1:25
-3:15

El 15 de enero, tuve la suerte de participar en el Python Pizza Holguin y contar que había supuesto para mi Python. Y lo cierto es que mientras preparaba aquella charla, me di cuenta de todo lo que Python me había dado, y que hasta el momento yo no había sido consciente. No solo se trata del lenguaje de programación en si, que por supuesto que también, sino además una serie de cuestiones relacionadas con el mismo, que me habían hecho abrir mi mente. Cuestiones como la distribución de software tanto específicamente para Python como para distribuciones Linux, la internacionalización, la relación con otro código, y mucho mas. En este sentido, muchas veces, nos centramos únicamente en lo que es código, y olvidamos lo demás. Así, en este episodio del podcast, te voy a hablar sobre los paquetes en Python, así como algunos paquetes realmente interesantes, y que tratan distintos campos completamente distintos.

Python, pip y cuatro paquetes productivos

Python, pip y cuatro paquetes productivos

Una de las características interesantes de Python es que te permite utilizar módulos o paquetes implementados por terceros. Así, para crear tu propia aplicación, no necesitas programarlo todo desde cero, sino que te puedes apoyar en el código de otras personas. Módulos o paquetes que haya implementado una sola persona o un colectivo. Por supuesto, que esto tiene sus ventajas e inconvenientes.

Por un lado la ventaja es clara, te permite implementar tu software de forma rápido y en general mucho mas eficiente. Se supone que partes de un paquete específico para tratar algo concreto. Normalmente, este código, este paquete, estará o debería estar bien programado, y tu estarías apoyándote en una superficie sólida.

Pero esta misma ventaja es el propio inconveniente, porque si el paquete o paquetes sobre los que te apoyas presentan problemas, actualmente o en un futuro, tu desarrollo los va a heredar. Esto lo has podido ver recientemente, no en Python, pero si en otros lenguajes de programación que también utilizan paquetes de terceros, como han sido los recientes casos de Java y JavaScript.

Así, a la hora de elegir los paquetes que utilizarás en tu software, tendrás que hacer una pequeña investigación sobre los mismos, antes de lanzarte a utilizar uno u otro.

De cualquier forma el uso de los paquetes de terceros, te ahorrará mucho tiempo, y con unas pocas líneas de código, puedes tener resuelto un problema, o incluso automatizada cualquier acción.

Paquetes interesantes

Sea como fuere, lo cierto es que ahí fuera, existe una gran cantidad de paquetes de Python esperando que los utilices. Este último fin de semana, me he enzarzado en un proyecto, que utiliza GitLab para hacer despliegues, y he tenido que utilizar Jinja2, para poder crear archivos en Markdown. Esto me ha dado precisamente la idea de este episodio del podcast. PAra que veas todo el potencial que tienes delante de tus dedos.

Jinja2

El primero de los paquetes de los que te quiero hablar es precisamente de uno de los que he utilizado este fin de semana Jinja2. Se trata de un motor de plantillas extensible realmente rápido y muy potente. Tan potente, que te permite introducir código Python en las propias plantillas. Así, algunas de las características de este motor de plantillas son las siguientes,

  • Inclusión y herencia de plantillas
  • Define e importa macros en las propias plantillas
  • Soporta async
  • Soporta la internacionalización
  • Las plantillas se compilan a código Python optimizado

Una plantilla es algo tan sencillo como lo que ves a continuación,

{% extends "base.html" %}
{% block title %}Members{% endblock %}
{% block content %}
  <ul>
  {% for user in users %}
    <li><a href="{{ user.url }}">{{ user.username }}</a></li>
  {% endfor %}
  </ul>
{% endblock %}

Así, por ejemplo, puedes llamar a una de estas plantillas pasándole un diccionario, que es básicamente lo que hice este fin de semana y que te rellene un documento. O como en mi caso mas de 200.

PIL, Pillow y pygram

Estos tres paquetes están relacionados entre si. Se trata de tres librerías que te permiten trabajar con imágenes. Si bien Pillow es un fork de PIL, pygram es un paquete completamente independiente. Los dos primeros paquetes son Python Imaging Library, y te dan capacidades de proceso de imágenes. Así, algunas de las habilidades de estas librerías son las siguientes,

  • permiten leer y escribir imágenes, y por ende convertir entre distintos formatos
  • puedes cortar, recortar, copiar, pegar y mezclar Imágenes
  • es posiblre realizar tanto transformaciones geométricas como cromáticas
  • también podrás realizar todo tipo de secuenciasa de imágenes.

En este sentido, PIL lo he utilizado para un complemento de Nautilus, Nemo y Caja llamado Nautilus-Image-Tools, que te permite realizar todas estas operaciones directamente desde el menú contextual de cada uno de estos gestores de archivos y en modo de proceso por lotes.

youtube-dl y yt-dlp

Estos dos seguro que los conoces y los has utilizado como aplicaciones independientes, pero por supuesto también los puedes utilizar directamente desde tu aplicación. De esta forma, puedes hacer todas las operaciones que harías desde la línea de comandos, pero desde el software que tu implementes. Para que te hagas una idea de las posibilidades que ofrecen estas dos herramientas, en concreto, la segunda que es un fork, de la primera, la estoy utilizando para publicar en todas las redes sociales una porción del vídeo que publico en YouTube.

ansible y fabric

Ansible

Ansible es una de esas herramientas que ya de por si sola es un mundo completo. De hecho, en atareao.es, puedes encontrar un tutorial de Ansible. Esta es una herramienta básica de administración de sistemas, y te puede ahorrar mucho trabajo, si tienes una buena colección de playbooks propios o de terceros. Como dicen los propios desarrolladores de Ansible,

Ansible es un sistema de automatización IT radicalmente simple. Gestiona configuraciones despliega aplicaciones, realiza provisiones en la máquina, automatización de redes, orquestación.

Te recomiendo le des un vistazo al tutorial de Ansible, para que veas todas las opciones que tienes al alcance de tus dedos.

Fabric

Por otro lado, Fabric es una librería de alto nivel, diseñada para ejecutar comandos de shell de forma remota sobre SSH. Esto te permite realizar alto tan sencillo como lo siguiente,

from fabric import Connection
result = Connection('web1.example.com').run('uname -s', hide=True)
msg = "Ran {0.command!r} on {0.connection.host}, got stdout:\n{0.stdout}"
print(msg.format(result))

O si solo ejecutas print(result), puedes obtener algo tan sencillo como,

Command exited with status 0.
=== stdout ===
Linux

(no stderr)

Brutal no te parece. Esto puede ser una forma muy cómoda de extraer información de equipos remotos, sin tener que preocuparte de nada.

Charla con José Jiménez

Si te gusta Python, no te puedes perder el episodio siguiente, el 406 en el que hablaré con José Jiménez sobre precisamente Python, y algunos de la multitud de proyectos que lleva adelante.


Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.

Deja una respuesta

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