Simplifica el sistema de bibliotecas con Python

Simplifica el sistema de bibliotecas con Python

Thiago Andrade. Las bibliotecas, también llamadas paquetes, son básicamente un conjunto de módulos (archivos de código simple) que facilitan el desarrollo de nuevos proyectos de software. La idea detrás de ellos es tomar el código que se repite con frecuencia y encapsularlo para usarlo en el futuro en diferentes programas. Con esto, puedes crear y usar bibliotecas propias o instalar bibliotecas de terceros. En este artículo, veremos con más detalle cómo hacer esto usando Python.


Administradores de paquetes

Solía ​​ser común instalar bibliotecas como cualquier otro programa y agregarlas manualmente a su código. Sin embargo, con múltiples desarrolladores trabajando simultáneamente en los mismos proyectos y la necesidad de escalar rápidamente los servicios, surgió la demanda de crear un sistema de gestión de paquetes, organizar el código y agilizar el proceso de desarrollo.

Podemos dividir los gestores de paquetes en dos tipos: los del sistema operativo (que sirven para instalar todo tipo de software, no destinados específicamente a la programación) como en el caso de Linux donde tenemos APT, y los destinados a lenguajes de programación específicos como NPM o Yarn para JavaScript y Pip o Conda para Python.


Módulos integrados

Ampliamente utilizados, los módulos incorporados forman parte de la biblioteca estándar, también llamadas bibliotecas nativas y que vienen con el lenguaje de programación cuando lo instalas, no siendo necesario usar un administrador de paquetes o instalar manualmente. Algunos ejemplos son sockets, subprocesos, multiprocesamiento y fecha y hora.


Cómo instalar e importar en Python

La instalación de librerías en python con el administrador de paquetes Pip se realiza desde el siguiente comando en la terminal:

pip install nome_da_biblioteca

También puedes elegir una versión específica de una biblioteca. Simplemente coloca dos signos iguales y luego el número de versión:

pip install pillow==5.2.0

Crea tus propios módulos y paquetes

Ahora haremos un ejercicio simple creando nuestra propia librería para practicar la importación y evitar los errores “ModuleNotFoundError” y “NameError”.

Primero, crea una carpeta llamada "paquete1", luego un archivo Python llamado "módulo1" dentro con el siguiente código:

def SomaDoisNumeros(num1, num2):
    return num1 + num2

def MultiplicaDoisNumeros(num1, num2):
    return num1 * num2

Estas funciones son muy simples y autodescriptivas, una suma y la otra multiplica dos números. Usémoslas para probar nuestro sistema. Esta estructura que acabamos de crear ya se puede considerar una biblioteca por encima de las versiones 3.x de Python, básicamente es solo una carpeta con archivos de Python.

En versiones anteriores de Python 2.x se usaba un archivo vacío llamado init.py, y era a través de él que el lenguaje identificaba que esa carpeta era un paquete de Python. En las versiones más recientes, este archivo ya no es necesario, pero normalmente se sigue utilizando para mantener la compatibilidad.

Ahora crea otro archivo de Python un nivel más arriba (fuera de la carpeta del paquete 1), llamado main.py, donde él usaremos las funciones del módulo 1 de la biblioteca que acabamos de crear. Primero con el método de importar todo el módulo:

from pacote1 import modulo1
print(modulo1.SomaDoisNumeros(1,2))

Si todo es correcto, al ejecutar, aparecerá en la terminal el resultado de la suma. Transforma este código en un comentario y usa el método de importar las funciones del módulo directamente de la siguiente manera:

from pacote1.modulo1 import MultiplicaDoisNumeros
print(MultiplicaDoisNumeros(4,3))

El resultado de la multiplicación debería aparecer en la terminal, también puedes importar todas las funciones y clases de un módulo dado simplemente reemplazando el nombre de la función con un asterisco:

from pacote1.modulo1 import *
print(SomaDoisNumeros(1, 2))
print(MultiplicaDoisNumeros(4,3))

Al ejecutarse, debe aparecer tanto el resultado de la suma como el de la multiplicación. Esta notación también se puede usar para importar todos los módulos presentes en una biblioteca, pero primero es necesario crear el archivo init.py dentro de la carpeta paquete 1 y dentro de él asignaremos el nombre de cada módulo en una lista a la variable todos:

__all__ = ["modulo1"]

Si tuviéramos otros módulos, simplemente agréguelos a la lista. Ahora podemos usar la siguiente notación para trabajar con este módulo:

from pacote1 import *
print(modulo1.SomaDoisNumeros(1,2))

Una práctica muy común es también acortar el tamaño del nombre del paquete en las importaciones usando el comando 'as', evitando así tener que escribir el nombre completo al usarlo, ver el ejemplo acortando la librería Pandas:

import pandas as pd
novo_dataframe = pd.Dataframe() 

Vale la pena mencionar que al instalar e importar bibliotecas de terceros, siempre verifique que el nombre y la versión sean exactamente iguales a la biblioteca con la que está tratando de trabajar, ya que puede haber bibliotecas con nombres similares y al importar puede fallar si instalaste el incorrecto.

Mejores prácticas al trabajar con bibliotecas

Una buena práctica antes de instalar bibliotecas en python es crear entornos virtuales, de modo que puedas aislar dependencias para cada proyecto. Y esto evita conflictos si tienes proyectos trabajando con diferentes versiones. Para crear un entorno virtual es sencillo, basta con escribir el siguiente comando en la terminal:

python -m venv nome_do_ambiente_virtual

Para activarlo en Windows, escribe el siguiente comando:

.\nome_do_ambiente_virtual\Scripts\activate

Si utilizas Linux, el comando es el siguiente:

source nome_do_ambiente_virtual/bin/activate

Otra buena práctica: al compartir tu código con otro desarrollador en administradores de versiones como GitHub, en lugar de enviar las bibliotecas juntas al repositorio, declara en el archivo .gitignore el nombre de la carpeta donde se instalaron las bibliotecas que se ignoran al enviar el código (commit and push), que en el caso de Python está en la carpeta del entorno virtual.

Para que el otro desarrollador sepa cuáles son y pueda instalar las librerías necesarias para el proyecto, se envía otro archivo que contiene el nombre y la respectiva versión de la librería. El comando para generar este archivo usando el administrador de paquetes pip es éste:

pip freeze > requirements.txt

Lo que hace este comando es simplemente tomar el resultado de la congelación de Pip y guardarlo en el archivo de texto. Y cuando usa este proyecto, simplemente usa el comando de instalación de bibliotecas que hace referencia al archivo:

pip install -r requirements.txt

Bibliotecas de Python más utilizadas

  • Pandas: sirve para trabajar con dataframes, leyendo y escribiendo en archivos csv y excel por ejemplo.
  • Numpy: principalmente ayuda con el rendimiento del código, tiene funciones para trabajar con matrices, álgebra lineal y sombras.
  • Matplotlib: tiene la función de crear diferentes tipos de gráficos, interactivos, en dos o tres dimensiones, visualizar imágenes, etc.
  • TensorFlow: es una biblioteca de aprendizaje automático destinada a crear redes neuronales, con el objetivo de encontrar correlaciones entre datos.
  • Selenium: utilizado tanto para hacer el famoso webscraping, que es la captura de datos en internet, como para pruebas automatizadas.
  • Scikit-learn: biblioteca de aprendizaje automático de código abierto con funciones de clasificación, regresión y agrupación, entre muchas otras.
  • NLTK: significa kit de herramientas de lenguaje natural, se usa más para una parte de inteligencia artificial enfocada en el procesamiento del lenguaje natural, que son los idiomas que hablamos, portugués, inglés, etc.
  • Pillow: es una extensión de la biblioteca PIL, utilizada para manipular imágenes, brindando funcionalidades similares a las que se encuentran en software como Photoshop.
  • OpenCV: es una biblioteca que permite trabajar en el área de la visión por computadora, siendo muy utilizada para el reconocimiento facial y de objetos.

Framework o biblioteca: ¿cuál es la diferencia?

Para concluir, vale la pena aclarar una duda frecuente que surge: ¿cuál es la diferencia entre un marco y una biblioteca? Estos términos se usan a menudo en el mismo contexto, pero no son lo mismo. En pocas palabras, una biblioteca es solo código que importa y usa en ciertas partes dentro de tu propio código, mientras que un marco es algo más amplio.

Es una plataforma donde te desarrollarás a partir de ella. A pesar de tener una estructura más compleja, es posible confiar en sus propias bibliotecas, sistema de prueba y comandos de terminal para acelerar el flujo de trabajo. Algunos ejemplos de frameworks son: Django, NextJS, Angular, Vue, Laravel y Flutter.

Si tienes alguna pregunta sobre la estructura de carpetas y archivos en el ejercicio que desarrollamos en este artículo, visita el repositorio en GitHub para obtener más información.

¡Saludos!

⚠️
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Revelo.

Revelo Content Network da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.