Curso
Como principiante, empiezas a trabajar con Python en el intérprete. Más adelante, cuando necesites escribir programas más largos, empezarás a escribir guiones. A medida que tu programa aumente de tamaño, es posible que quieras dividirlo en varios archivos para facilitar el mantenimiento y la reutilización del código. La solución son los módulos. Puedes definir tus funciones más utilizadas en un módulo e importarlo, en lugar de copiar sus definiciones en distintos programas. Un módulo puede ser importado por otro programa para hacer uso de su funcionalidad. Así también puedes utilizar la biblioteca estándar de Python.
En pocas palabras, un módulo es un archivo formado por código Python. Puede definir funciones, clases y variables, y también puede incluir código ejecutable. Cualquier archivo de Python puede referenciarse como módulo. Un archivo que contiene código Python, por ejemplo: test.py se denomina módulo, y su nombre sería test.
Existen varios métodos para escribir módulos, pero el más sencillo es crear un archivo con extensión .py, que contenga funciones y variables.
Antes de empezar a escribir tus propios módulos, te recomiendo que eches un vistazo a nuestro curso Introducción a Python para la Ciencia de Datos, que cubre los fundamentos del lenguaje de programación Python.
Aprende Python desde cero
Importar módulos en Python
Para utilizar la funcionalidad presente en cualquier módulo, tienes que importarlo a tu programa actual. Tienes que utilizar la palabra clave import junto con el nombre del módulo deseado. Cuando el intérprete se encuentra con una sentencia import, importa el módulo a tu programa actual. Puedes utilizar las funciones dentro de un módulo utilizando el operador punto (.) junto con el nombre del módulo. En primer lugar, vamos a ver cómo utilizar los módulos de la biblioteca estándar. En el ejemplo siguiente, el módulo math se importa en el programa para que puedas utilizar la función sqrt().
import math # Import the math module
num = 4
print(math.sqrt(num)) # Call the sqrt() function from the math module
Por razones de eficacia, cada módulo sólo se importa una vez por sesión de interpretación. Por tanto, si cambias tus módulos, debes reiniciar el intérprete.
Si sólo quieres probar un módulo de forma interactiva, utiliza reload(), por ejemplo: reload(module_name). En Python 3, tienes que importar importlib antes de utilizar reload():
import importlib
importlib.reload(module_name)
Cómo escribir tus propios módulos Python
Ahora que has aprendido a importar un módulo en tu programa, es el momento de escribir el tuyo propio y utilizarlo en otro programa. Escribir un módulo es como escribir cualquier otro archivo de Python. Empecemos escribiendo una función para sumar/restar dos números en un archivo calculation.py.
def add(x,y):
return (x+y)
def sub(x,y):
return (x-y)
Si intentas ejecutar este script en la línea de comandos, no ocurrirá nada porque no has ordenado al programa que haga nada. Crea otro script Python en el mismo directorio con el nombre module_test.py y escribe en él el siguiente código.
import calculation #Importing calculation module
print(calculation.add(1,2)) #Calling function defined in the calculation module
Si ejecutas module_test.py, verás "3" como salida. Cuando el intérprete se encontró con la sentencia import, importó el módulo calculation en tu código y luego, utilizando el operador punto, pudiste acceder a la función add().
Otras formas de importar módulos en Python
Hay más formas de importar módulos:
from .. importdeclaraciónfrom .. import *declaración- cambiar el nombre del módulo importado
Utilizando from module import name
La sentencia from..import te permite importar funciones/variables concretas de un módulo en lugar de importarlo todo. En el ejemplo anterior, al importar calculation en module_test.py se importaron las funciones add() y sub(). Pero, ¿y si sólo necesitaras la función add() en tu código? He aquí un ejemplo para ilustrar el uso de from..import.
from calculation import add
print(add(1,2))
En el ejemplo anterior, sólo se importa y utiliza la función add(). ¿Notas el uso de add()? Ahora puedes acceder a él directamente sin utilizar el nombre del módulo. También puedes importar varios atributos, separándolos con una coma en la sentencia de importación. Mira el siguiente ejemplo:
from calculation import add,sub
Utilizando from module import *
Puedes importar todos los atributos de un módulo utilizando esta sentencia. Esto hará que todos los atributos del módulo importado sean visibles en tu código.
He aquí un ejemplo para ilustrar el uso de from .. import *:
from calculation import *
print(add(1,2))
print(sub(3,2))
Ten en cuenta que, en el mundo profesional, debes evitar el uso de from..import y from..import*, ya que hace que tu código sea menos legible.
Renombrar módulos en Python
Puedes cambiar el nombre del módulo que estás importando, lo que puede ser útil en los casos en que quieras dar un nombre más significativo al módulo o el nombre del módulo sea demasiado grande para utilizarlo repetidamente. Puedes utilizar la palabra clave as para cambiarle el nombre. El siguiente ejemplo explica cómo utilizarlo en tu programa.
import calculation as cal
print(cal.add(1,2))
Te has ahorrado tiempo de mecanografía renombrando calculation como cal.
Ten en cuenta que ahora ya no puedes utilizar calculation.add(1,2), puesto que calculation ya no se reconoce en tu programa.
Ruta de búsqueda de módulos en Python
Puede que necesites que tus módulos se utilicen en distintos programas o proyectos y que su ubicación física en el directorio sea diferente. Si quieres utilizar un módulo que reside en otro directorio, tienes algunas opciones que te ofrece Python.
Cuando importas un módulo llamado calculation, el intérprete busca primero un módulo incorporado con ese nombre. Si no lo encuentra, busca entonces un archivo llamado calculation.py en una lista de directorios dada por la variable sys.path. sys.path contiene estas ubicaciones:
-
El directorio que contiene el script de entrada (o el directorio actual)
-
PYTHONPATH(una lista de nombres de directorio con la misma sintaxis que la variable de shellPATH) -
El valor por defecto dependiente de la instalación
Supongamos que module_test.py está en el directorio /home/datacamp/, y que has movido calculation.py a /home/test/. Puedes modificar sys.path para incluir /home/test/ en la lista de rutas, en la que el intérprete de Python buscará el módulo. Para ello, tienes que modificar module_test.py de la siguiente manera:
import sys
sys.path.append('/home/test/')
import calculation
print(calculation.add(1,2))
Archivos compilados en bytes en Python
Importar un módulo aumenta el tiempo de ejecución de los programas, por lo que Python tiene algunos trucos para acelerarlo. Una forma es crear archivos compilados en bytes con la extensión .pyc.
Internamente, Python convierte el código fuente en una forma intermedia llamada bytecode. Luego lo traduce al idioma nativo de tu ordenador y lo ejecuta. Este archivo .pyc es útil cuando importes el módulo la próxima vez desde un programa diferente: será mucho más rápido, ya que una parte del procesamiento necesario para importar un módulo ya está hecho. Además, estos archivos compilados en bytes son independientes de la plataforma.
Ten en cuenta que estos archivos .pyc suelen crearse en el mismo directorio que los archivos .py correspondientes. Si Python no tiene permiso para escribir en los archivos de ese directorio, no se crearán los archivos .pyc. Estos archivos suelen almacenarse en el directorio __pycache__ junto a tus archivos .py.
La función dir() de Python
La función dir() sirve para averiguar todos los nombres definidos en un módulo. Devuelve una lista ordenada de cadenas que contienen los nombres definidos en un módulo.
import calculation
print(calculation.add(1,2))
print(dir(calculation))
Salida:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'add', 'sub']
En la salida, puedes ver los nombres de las funciones que has definido en el módulo, add & sub. El atributo __name__ contiene el nombre del módulo. Todos los atributos que empiezan por guión bajo son atributos por defecto de Python asociados a un módulo.
Conclusión
Crear un módulo es necesario para gestionar mejor el código y reutilizarlo. Python te proporciona algunos módulos incorporados, que pueden importarse utilizando la palabra clave import. Python también te permite crear tus propios módulos y utilizarlos en tus programas. Te proporciona archivos compilados en bytes para superar el coste de utilizar módulos, lo que hace que la ejecución sea más rápida. Puedes utilizar dir() para conocer los atributos definidos en el módulo que se utiliza en un programa. Se puede utilizar tanto en módulos predefinidos como en módulos definidos por el usuario.
Si quieres aprender más sobre Python, puedes echar un vistazo a nuestro curso Python Intermedio para la Ciencia de Datos.
Preguntas frecuentes
¿Puedo importar un módulo dentro de una función?
Sí. Puedes importar módulos dentro de funciones, pero normalmente es mejor importar al principio del archivo para mayor claridad y rendimiento.
¿Qué ocurre si dos módulos tienen el mismo nombre?
Python importará la primera coincidencia que encuentre en la ruta de búsqueda de módulos (sys.path). Ten cuidado con los nombres para evitar conflictos.
¿Tengo que compilar mi módulo a .pyc manualmente?
No. Python crea automáticamente archivos .pyc cuando importas un módulo, si tienes permisos de escritura.
¿Cómo puedo comprobar de dónde se importa un módulo?
Utiliza el atributo __file__ del módulo:
import math
print(math.__file__)
¿Está bien utilizar from module import *?
Funciona, pero no se recomienda en código de producción. Puede contaminar el espacio de nombres y dificultar el seguimiento de lo que se utiliza.
¿Puedo recargar un módulo después de editarlo?
Sí, en una sesión interactiva, utiliza importlib.reload():
import importlib
import mymodule
importlib.reload(mymodule)