Importación de módulos

Los módulos son archivos que contienen código Python, y puedes importarlos en otros archivos o scripts utilizando la declaración import.

import math
 
resultado = math.sqrt(16)

También puedes importar funciones o variables específicas de un módulo usando la sintaxis from ... import ....

from math import sqrt, pi
 
resultado = sqrt(3 * pi)

Módulos estándar

Python viene con una biblioteca estándar que incluye muchos módulos útiles, los cuales ofrecen funciones y clases para realizar tareas comunes.

import os
 
os.listdir(".")  # lista los archivos en el directorio actual

Algunos de los módulos más utilizados son:

  • math: Proporciona funciones matemáticas como trigonometría, logaritmos y exponenciales.
  • random: Generación de números aleatorios y funciones relacionadas con la aleatoriedad.
  • datetime: Manejo de fechas y horas, incluyendo operaciones de formato y aritmética de tiempo.
  • os: Interacción con el sistema operativo, como la manipulación de rutas de archivos y la ejecución de comandos del sistema.
  • re: Soporte para expresiones regulares, permitiendo la búsqueda y manipulación de cadenas de texto.
  • json: Serialización y deserialización de objetos JSON, facilitando la conversión entre estructuras de datos de Python y cadenas JSON.
  • csv: Facilita la lectura y escritura de archivos CSV, permitiendo la manipulación de datos tabulares.
  • collections: Contiene estructuras de datos adicionales como namedtuple, deque, y Counter.
  • urllib: Conjunto de módulos para trabajar con URLs, como la recuperación de datos de Internet. Todos estos módulos están detallados en la documentación de Python.

Módulos y paquetes propios

Puedes crear tus propios módulos simplemente escribiendo un archivo Python con el código que deseas incluir. Luego, puedes importarlo usando el nombre del archivo (sin la extensión .py).

Suponiendo que tienes un archivo mimodulo.py:

# mimodulo.py
def mi_funcion():
    return "¡Hola, mundo!"

Puedes importarlo en otro archivo Python:

import mimodulo
 
mimodulo.mi_funcion()  # "¡Hola, mundo!"

Paquetes y estructura de directorios

Un paquete es una colección de módulos organizados en una jerarquía de directorios. Cada directorio dentro de un paquete puede contener un archivo especial llamado __init__.py. Este archivo se encarga de ejecutar código al cargar el módulo, y puede usarse para establecer constantes, exportar funciones de módulos internos, etc.

Estructura de ejemplo:

mipaquete/
  __init__.py
  modulo1.py
  modulo2.py

Puedes importar módulos desde el paquete:

from mipaquete import modulo1

O importar directamente una función dentro de un módulo

from mipaquete.modulo1 import mi_funcion

Carga de paquetes desde otros directorios

Si deseas importar un paquete que no se encuentra en la misma carpeta donde está el código donde quieres utilizarlo, puedes usar la variable de entorno PYTHONPATH para indicarle a Python dónde buscar los paquetes.

# establece la variable PYTHONPATH para que Python busque los paquetes
export PYTHONPATH=~/librerias/mi_paquete
# luego de esto, es posible ejecutar un script que haga uso del paquete, aunque no esté en la misma ubicación
python mi_script.py

Imports y ámbito global

Al importar un elemento de un módulo de Python, todo el módulo se ejecutará. Esto significa que cualquier código en el ámbito global del módulo (es decir, código que no está encapsulado dentro de una función o clase) también se ejecutará. Esta ejecución automática del ámbito global puede llevar a efectos secundarios no deseados, por lo que se sugiere minimizar el uso de código en dicho ámbito.

Scripts y Programas Principales

Cuando el objetivo es diseñar un archivo Python para actuar como un programa principal o “script”, es posible que desees colocar código en el ámbito global para que se ejecute intencionalmente. No obstante, una práctica más segura es emplear el bloque if __name__ == '__main__':. El código dentro de este bloque se ejecutará solo si el archivo se ejecuta como el script principal y no se ejecutará cuando el módulo se importe en otro archivo.

# Esto se ejecutará siempre
print("Esto se imprimirá siempre, incluso durante la importación.")
 
 
def mi_funcion():
    print("Esta es una función útil.")
 
 
# Esto solo se ejecutará si el módulo es el script principal
if __name__ == "__main__":
    print("Esto solo se imprimirá si se ejecuta el módulo directamente.")