Módulos y Librerías en Python : Importar, acceder, crear

Antes de continuar con el modulo 3 de programacion gráfica y desarrollo web; hay algunas cosas que debemos ver para hacer mas fácil el entendimiento del panorama completo. A la hora de programar a veces es necesario recurrir a módulos, librerías, paquetes, etc. Para facilitarnos el desarrollo de un programa en caso de un modulo existente o librería. También para organizar nuestro programa si es demasiado extenso y cuenta con muchas lineas de código, su estructura puede ser separada en módulos.

¿Qué son los módulos y librerías?

Explicación de módulos y libreríasA mi me gusta esta comparación para referirme a un modulo. Si alguna vez has jugado el juego Homeworld sabrás de que hablo, sino pues aun así, es probable que lo entiendas. En dicho juego tu necesitabas que la nave nodriza (madre) fuera capaz de crear naves Cazas para combatir. Pero para eso debía contar con un Módulo, el mismo era una pieza de la nave que se construía donde dentro de ella se encontraban ingenieros capaces de elaborar naves cazas. A medida que el juego avanza los módulos se actualizan porque los ingenieros descubren y aprenden junto a científicos nuevas capacidades que permitían añadir a las naves nuevas habilidades. Si en el juego tu estratégicamente atacabas el Modulo de producción de cazas del enemigo; el mismo ya no podía producir mas naves entonces; al destruirlas todas quedaba indefenso.

Podemos en Python aplicar esta comparación refiriéndonos a un módulo como una pieza de código externa que se añade y aloja diferentes herramientas; pudiendo así agrupar las mismas por categoría o finalidad, etc. Y una librería puede compararse con los ingenieros que se mantienen en constante actualización brindando esos conocimientos necesarios para la producción (funciones, capacidades, habildades, etc).

En programacion un módulo se define como la porción de un programa.

En programacion una librería se define como un conjunto de implementaciones funcionales.

Entonces se trata de organización y capacidad a la hora de desarrollar una aplicación. Esta puede hacer con miles de lineas en un solo archivo, o con 5 archivos de cientos de lineas; así surgen dos opciones. Hacerlo como un modulo aparte, o dentro del código del mismo programa; pero aquí surge un problema. Al incluir todo el código de lo que podrían ser diferentes módulos en el mismo archivo obtendremos como resultado un enriedo de millones de lineas de código o quizás mas en un solo file. Y donde obtengas una serie de errores te encontraras mas perdido en el espacio que esta nave.

Y también si no dispones de las librerías, es como si no tuvieses la capacidad de lograr lo que quieres. Por ejemplo suponiendo que tu quieras hacer una calculadora en python, y la misma ya esta programada lógicamente. Pero tu quieres brindarle al usuario un entorno gráfico. Sin librería, estarías perdido. Salvo que tu programes desde 0 todo el entorno gráfico de tu programa!. Pero para eso existen las librerías y módulos “prefabricados o incorporados” por decir así que facilitaran el trabajo.

Importando módulos

Bien si un módulo es como una caja de herramientas y nosotros vamos a hacer cálculos, necesitamos un módulo que posea estos accesorios y debemos incorporarlo a nuestro programa.

Vamos a crear un archivo .py como clásicamente lo hacemos en nuestro IDE. Y dentro de el vamos a importar el módulo Math usando la orden import. De esta manera:

Como ves en la barra lateral izquierda en este caso en Geany nos aparece que ha sido importado el módulo Math. Este es un módulo estándar de Python. Usemoslo un poco para ver como se utiliza un módulo. Una vez importado vamos a utilizar en este caso una función del modulo para calcular la raíz cuadrada de un numero. Para eso colocaremos un input donde el usuario ingrese el numero y nos devuelva la raíz.

Importando Módulo math

Quedando nuestro código así:

Por supuesto que solo para sacar una raíz cuadrada no es necesario importar semejante módulo. Si con un print(x**.5) bastaba no??

Solo estoy ejemplificando con uno de los módulos mas utilizados en python! Y aquí nace un problema, estamos importando todo un modulo para usar solamente una función del mismo. Y resulta inconveniente en grandes programas, para eso existe FROM.

From module import

La orden from module import nos permitirá importar determinadas funciones de un modulo y no el modulo completo. Aunque hay que tener cuidado con lo que importamos de cada módulo, y pronto sabrás porque. Primero veamos como haríamos para solo importar y utilizar esta función SQRT de Math. Dejando todo el equipaje pesado de lado:

from math import *

Importando Módulos

Este código lo que hará sera importar todo lo que en el modulo math este declarado como explicito. No exportara todo el código del modulo como se cree a menudo. Y resulta riesgoso exportar varios módulos de esta manera porque no sabemos si esos módulos tienen nombres de variables, clases, métodos exactamente iguales. Y que si así fuera podríamos obtener errores en la ejecución de una función de alguno de los módulos.

Como ves el código de nuestro programa también ha sido cambiado, específicamente en la linea 7. Porque de esta forma ya no precisamos indicar que sqrt es una función del módulo math. Porque directamente importamos todas las funciones explicitas así que solo basta dar el nombre de la función a utilizar.

Recuerda de esta manera se exporta lo que el programador del módulo declaro como explicito.

Si nosotros sabemos que usaremos solo determinada función de ese modulo y no todas las demás podemos solo importar la que nos interesa, en este caso así:

from math import (sqrt)

Para saber todas las funciones de un modulo podemos hacerlo mediante el siguiente codigo, en este caso pongo math de ejemplo:

import math
print (dir(math))

Módulos

 

De módulos como este python cuenta con muchísimos, puedes investigar un poco al respecto y veras que en algunos casos solo con importar una función de determinado modulo, te ahorras varias lineas de código y dolores de cabeza!

 

¿Cómo creamos un módulo propio?

Pues esto es fácil, primeramente debemos pensar como vamos a dividir nuestro proyecto. Si se tratase de una calculadora por ejemplo podríamos separar en un módulo las funciones de las operaciones matemáticas, por el otro la librería gráfica y el ejecutable principal por ejemplo calc.py que integra ambos.

Vamos a tomar de ejemplo la calculadora en python que realizamos en una entrada de manejo de errores hace unos meses. Aqui esta el código incluyendo Try/Except

Abrir Spoiler

La dejo en spoiler para que no se haga molesto tanto código, pero puedes ver como ya antes habíamos separado las funciones en el apartado señalado con un 1. El bucle en el apartado 2 y finalmente las sentencias en el apartado 3.

Pues bien vamos a exportar esas funciones a un modulo propio, el cual llamaremos calcfunc.py

Así que colocamos calc.py en una carpeta, pues el modulo debe alojarse preferentemente junto al archivo que lo importa o invoca digamos.

Entonces copiamos el apartado 1 a nuestro nuevo módulo calcfunc. Pero vamos a mejorar ese código asqueroso así:

Este es nuestro modulo, solo mejoramos el código para que quede en una sola linea y quitamos el print. Porque yo quiero que el solo se encargue de procesar los datos que le enviamos.

Ahora es el momento de modificar el código de la calculadora para importarlo y trabajar con sus funciones. Lo importe de esta manera para evitar tener que colocar calcfunc, si tu simplemente colocas un import calcfunc, te obligara a colocar antes del punto el nombre del mismo.

Obviamente ese print que quitamos debemos agregarlo en la calc.py para que nos muestre “El resultado es” y también añadir los argumentos a, b que estamos dando como parámetros en las funciones del módulo, de lo contrario no funcionaria. Y (tambores) así queda nuestro código:

Y este es el resultado final de calc.py:

calc.py Pythones

 

Esta entrada aun esta en actualización constante. Revisarla nuevamente en un par de días.

Bien y eso es todo por ahora, era necesario explicar todo esto antes de proseguir con entornos gráficos. Espero te halla quedado claro y nos vemos en la siguiente entrada!!

 

 

 


 

Suscribete al blog!

Mantenemos tus datos en privado y NO enviamos spam. Lee nuestra política de privacidad.

Ayúdame a llegar a mas personas!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •