Viajes       https://es.bhlyqj.com

Sentencia `import` de Python: Módulos, espacios de nombres y mejores prácticas

En Python, import es cómo traes código de un módulo a otro. No es "import principal" — ese no es término Python. Aquí cómo funciona realmente, con patrones de uso diario.

Sintaxis básica import

import nombre_modulo 

Esto carga nombre_modulo y lo vincula a variable en tu espacio de nombres actual. Accedes a su contenido con notación punto:

 import math math.sqrt(16) # 4.0 math.pi # 3.14159... 

Patrones import comunes

1. Importar módulo (Por defecto recomendado)

 import pandas as pd import numpy as np df = pd.DataFrame({'a': [1,2,3]}) arr = np.array([1,2,3]) 

Ventajas: Explícito, legible, evita colisiones nombres, muestra origen.

2. Importar nombres específicos

 from math import sqrt, pi sqrt(16) # 4.0 — sin prefijo pi # 3.14159... 

Usar cuando: Usas pocos nombres intensamente. Evitar: from modulo import * (contaminación espacio nombres).

3. Importar con alias

 import matplotlib.pyplot as plt import seaborn as sns 

Convenciones estándar (pd, np, plt, sns, tf, torch) hacen código instantáneamente legible.

4. Imports condicionales / perezosos

 # Solo importar dependencias pesadas cuando necesarias def analizar_datos(): import pandas as pd # Import local — inicio más rápido si no usado return pd.read_csv('datos.csv') 

Cómo funciona import internamente

  1. Verifica sys.modules — si ya cargado, devuelve módulo cacheado
  2. Busca módulo vía sys.path (dir actual, PYTHONPATH, site-packages, stdlib)
  3. Ejecuta código módulo — corre sentencias top-level (def, class, asignaciones)
  4. Crea objeto módulo — espacio nombres para globals del módulo
  5. Cachea en sys.modules
  6. Vincula nombre en espacio nombres importador (por sentencia import)

Ruta búsqueda módulos (sys.path)

 import sys sys.path # ['', '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload', # '/home/user/.local/lib/python3.11/site-packages', ...] 
  • '' = directorio script actual (o CWD si interactivo)
  • Instalar paquetes: pip install paquete → site-packages
  • Entornos virtuales aíslan site-packages

Paquetes y submódulos

 import paquete.submodulo from paquete import submodulo from paquete.submodulo import funcion 

Directorio con __init__.py = paquete. __init__.py puede exponer submódulos:

 # paquete/__init__.py from .submodulo import funcion_publica __all__ = ['funcion_publica'] 

Problemas comunes y soluciones

ProblemaCausaSolución
ModuleNotFoundErrorNo instalado / entorno equivocado / typopip install, verificar venv, revisar ortografía
ImportError: cannot import nameImport circular / nombre no en móduloReestructurar, mover imports dentro funciones
Colisión nombresfrom x import * o archivo local sombrea stdlibNo nombrar archivos math.py, random.py; usar imports explícitos
Error import relativoEjecutar módulo como scriptEjecutar como python -m paquete.modulo o usar imports absolutos

Mejores prácticas

  1. Librería estándar primero, luego terceros, luego locales — cada grupo alfabético
  2. Un import por línea (PEP 8)
  3. Usar import modulo sobre from modulo import *
  4. Alias: Usar estándares comunidad (pd, np, plt, tf, torch)
  5. Evitar manipulación runtime path — usar empaquetado correcto (pyproject.toml, pip install -e .)
  6. Type checking: from __future__ import annotations + guardas TYPE_CHECKING

Ejemplo: Bloque import limpio

 # Librería estándar import json import os from pathlib import Path from typing import List, Optional # Terceros import numpy as np import pandas as pd import requests # Locales from miproyecto.config import settings from miproyecto.models import User from miproyecto.utils import logger 

El sistema import de Python es potente, explícito y predecible — una vez entiendes el modelo de espacios de nombres. La regla de oro: haz obvio de dónde viene cada nombre. Tu yo futuro (y compañeros) te lo agradecerán.