jueves, 14 de julio de 2016

Python X (módulos o bibliotecas)

Este es otro post dedicado a programación en Python, encontraréis todos los posts de este tipo juntos en el apartado Programación del blog. Y si queréis aprender más podéis visitar la web oficial de www.python.org

En algunos de los próximos posts vamos a usar lo que en python se llaman módulos y/o bibliotecas. Por eso hoy vamos a ver como usarlos.



1. Qué es un módulo o bibliotecca de python



Un módulo es un archivo de python (con extensión .py) que contiene diferentes componentes, que pueden ser funciones variables y/o pequeños programas ejecutables. Además existen una gran cantidad de módulos para python en sus diferentes versiones (cuidado que algunos no son compatibles entre diferentes versiones). Cada unos de estos módulos tiene un nombre específico con el que lo podemos llamar, y como he dicho cada módulo puede contener múltiples componentes, variables, funciones o comandos ejecutables, cada uno también con un nombre específico. En muchos casos hay módulos con un componente con el mismo nombre, incluso diferentes módulos con componentes, variables y/o funciones con el mismo nombre, de forma que hay que tener cuidado al importarlos para no confundirnos.

Python lleva por defecto algunos de estos módulos ya incorporados (forman parte del núcleo para poder programar), sin embargo otros módulos deberemos descargarlos y/o instalarlos para poder usarlos. Muchos dispositivos de hardware, como por ejemplo los sensores, traen consigo sus propios módulos python para ayudarnos a programar con ellos de una forma sencilla. Aquí tenéis un link con la lista de módulos

https://docs.python.org/3/py-modindex.html


2. Como importar un módulo



Existen diferentes formas de importar un módulo, vamos a ver en qué se diferencian


2.1. Importar un módulo

2.1.1 Importar un módulo de forma normal (import)

La primera opción es importar un módulo con la orden import seguida del nombre del módulo que deseamos utilizar. Con esta acción podremos utilizar los componentes (funciones variables etc), usando la forma nombremodulo.componente.componente, veamos un ejemplo

# importamos el modulo datetime
import datetime
# llamamos al componente date y al componente today
dia=datetime.date.today()
# mostramos la fecha actual por pantalla
print(dia)

en primer lugar importamos el módulo datetime con la orden import datetime, en segundo lugar usamos la función today del componente date con la instrucción datetime.date.today(). Luego mostramos el resultado por pantalla. La orden import nombre_modulo nos obliga a usfoar la estructura modulo.componente.componente para utilizar los diferentes componentes.

2.1.2 Importar el componente de un módulo (from modulo import componente)

La segunda opción es importar directamente un componente de un módulo concreto, generalmente porque lo usamos mucho y queremos ahorrar tiempo mientras programamos. Veamos un ejemplo

# importamos el componente date del modulo datetime
from datetime import date
# llamamos al componente date y al componente today
dia=date.today()
# mostramos la fecha actual por pantalla
print(dia)

en primer lugar hemos importado el componente date del módulo datetime con la orden from datetime import date, esto hace que podamos llamar a este componente (date) de forma directa sin poner delante el nombre del módulo (como hacíamos en el ejemplo anterior), de forma que podemos usar la orden date.today(). Tened en cuenta que el módulo datetime tiene otros componentes pero si los queremos usar no los podremos llamar de forma directa a menos que los importemos, los componentes no importados se tienen que continuar llamando como en el ejemplo anterior modulo.componente.componente.

Si queremos importar mas de un componente lo haremos de la siguiente manera, vamos a importar el componente date y el componente datetime del módulo datetime (si ya lo sé no es un error el módulo datetime tiene también un componente datetime con el mismo nombre, como ya he dicho anteriormente es algo bastante normal).

# importamos dos componentes date y datetime
from datetime import date, datetime
# llamamos al componente date y today
dia=date.today()
# mostramos el dia actual por pantalla
print(dia)
# llamamos al componente datetime y now
ahora=datetime.now()
# mostramos el dia y hora actuales
print(ahora)

bien hemos importado dos componentes de un mismo módulo y los hemos llamado de forma directa.

Y si deseamos importar todos los componentes de un módulo, la forma mas sencilla es la siguiente.

# importamos todos los componentes
from datetime import *
# llamamos al componente date y today
dia=date.today()
# mostramos el dia actual por pantalla
print(dia)
# llamamos al componente datetime y now
ahora=datetime.now()
# mostramos el dia y hora actuales
print(ahora)

de esta forma tenemos accesibles todos los componentes de datetime.

¡Atención! Sin embargo esto puede llevarnos problemas, si importamos más de un módulo es posible que haya varios componentes con igual nombre y esto dificultará bastante la programación, mi consejo es utilizar palabras clave al importar

2.1.3 Importar módulos con palabras clave (import modulo as palabra_clave)

Podemos importar un módulo asignando una palabra clave en sustitución del nombre original, para ello usaremos la palabra as ,veamos un ejemplo que es muy sencillo

# importamos el modulo datetime asignando una palabra clave
import datetime as Fechas
# llamamos al componente date y today
dia=Fechas.date.today()
# mostramos el dia actual por pantalla
print(dia)
# llamamos al componente datetime y now
ahora=Fechas.datetime.now(
# mostramos el dia y hora actuales
print(ahora)

Esta opción nos permite cambiar y/o abreviar el nombre del módulo por una expresión mas sencilla para su uso. 
Desde mi punto de vista personal para importar módulos las mejores opciones son la primera y esta última, las otras pueden acabar con bastantes dolores de cabeza en el caso de usar muchos módulos.

2.1.4 Saber la ubicación de un módulo

Seguramente os preguntáis dónde se ubican físicamente los diferentes módulos que podemos usar en python. Pues bien los módulos como ya he dicho son archivos con extensión .py, si queréis conocer dónde está ubicado un módulo concreto solo tenéis que importarlo y ejecutar la orden print del módulo, como en el siguiente ejemplo

# importamos el módulo
import datetime
# imprimimos la ubicación
print(datetime)

veremos algo parecido a esto <module 'datetime' from '/usr/lib/python3.4/datetime.py'>, como podéis ver nos muestra la ruta del módulo, en este caso situada en la carpeta correspondiente de python (en mi caso la 3.4), ahora solo tenéis que abrir el explorador de archivos y acceder a la ruta indicada, dónde encontraréis el módulo indicado y muchos otros.