Pregunta 1¿Qué correspondencia de módulo / paquete / librería es correcta?
Módulos y paquetes — Importar desde otros archivos
Aprende las diferencias entre módulos, paquetes y librerías de Python, y cómo la sentencia import trae funciones desde otros archivos.
Las aplicaciones Python suelen construirse repartiendo el trabajo entre varios archivos y conectándolos entre sí. Este artículo recorre las unidades llamadas módulos y paquetes, además de cómo la sentencia import trae funciones desde otro archivo.
Módulo vs paquete vs librería
Python organiza el código en tres tamaños: módulo → paquete → librería. Un módulo es un único archivo .py, un paquete es una carpeta de módulos y una librería es el siguiente nivel — un paquete distribuible.
| Unidad | Qué es | Ejemplo |
|---|---|---|
| Módulo | Un único archivo .py | math_utility.py |
| Paquete | Una carpeta que contiene __init__.py | my_app/database/ |
| Librería | Una distribución de uno o varios paquetes | pandas / NumPy / requests |
Librería estándar vs librería de terceros
Python viene con una librería estándar lista para usar, y existen librerías de terceros que se instalan aparte. Las estándar como math, os y json funcionan con un simple import. Las de terceros como pandas o requests necesitan primero pip install nombre_del_paquete.
| Tipo | Instalación | Ejemplos |
|---|---|---|
| Librería estándar | Incluida con Python (sin instalación) | math / os / sys / json / datetime |
| Librería de terceros | Se añade con pip install | pandas / numpy / requests |
Importar tus propios módulos
Puedes importar tus propios archivos .py igual que la librería estándar. Cuando ejecutas Python localmente, coloca main.py y el archivo que quieres importar (math_utility.py) en la misma carpeta — eso es todo. Los archivos de la misma carpeta se cargan con un simple import math_utility desde main.py (sin sufijo .py en la sentencia import).
- main.py — el punto de entrada. Empieza con
import math_utility - math_utility.py — el módulo que define
add()/multiply()
import math_utility encuentra al vecino enseguida — sin necesidad de subcarpetas.import math_utility, Python carga math_utility.py desde la misma carpeta. Después puedes llamar a sus funciones como math_utility.add(...) con el nombre del módulo delante.import ejecuta el archivo entero una sola vez
Cuando escribes import math_utility, Python ejecuta math_utility.py de arriba abajo una sola vez. Las definiciones de función (def) se registran en memoria en ese momento, así que después puedes llamarlas como math_utility.add(...). Los cuerpos de esas funciones no se ejecutan durante el import — solo el código fuera de cualquier función (el nivel superior del módulo).
import math_utility, Python ejecuta math_utility.py de arriba abajo. Las definiciones def se registran en memoria y quedan invocables como math_utility.add(...) después.No ejecutes trabajo pesado en el nivel superior del módulo
El nivel superior es el código que está en la indentación más exterior — fuera de cualquier función o clase. Python lo ejecuta de arriba abajo cada vez que se importa el módulo. Poner trabajo pesado ahí (conexiones a BD, cargar archivos enormes, bucles infinitos) significa que simplemente importar el módulo tarda eternidades. Mantén la lógica pesada dentro de funciones y deja en el nivel superior solo definiciones e inicialización mínima.
Distinguir ejecución directa de import — __name__
Los archivos Python vienen en dos sabores: scripts ejecutados directamente (los lanzas con python xxx.py) y módulos importados por otra cosa. El mismo archivo puede jugar ambos papeles, y muchas veces necesitas distinguir cuál está pasando — por ejemplo, «ejecuta una prueba rápida solo cuando el archivo se ejecuta directamente».
La comprobación usa la variable especial __name__ que Python establece automáticamente. Cuando el archivo se ejecuta directamente, __name__ vale "__main__". Cuando el archivo se importa, __name__ es el nombre del módulo (el nombre del archivo). El código dentro de if __name__ == "__main__": solo se ejecuta en el primer caso.
__name__, fijada automáticamente, vale "__main__" cuando ejecutas el archivo directamente (python xxx.py), y el nombre del módulo (nombre de archivo) cuando otro archivo lo importa.# math_utility.py
def add(a, b):
return a + b
# Prueba rápida solo cuando se ejecuta directamente
if __name__ == "__main__":
print("check:", add(10, 20)) # 30
# Cuando otro archivo hace `import math_utility`,
# el bloque if de arriba no se ejecuta — solo se expone la función add.
Combinar varios de tus propios módulos
En aplicaciones reales sueles partir las funciones en archivos separados por responsabilidad y traerlas todas desde main.py. Por ejemplo, las comprobaciones de entrada viven en validator.py, el formato de presentación en formatter.py. Con responsabilidades partidas así, los cambios en el formato solo tocan formatter.py — main.py y validator.py se quedan intactos.
import validator e import formatter, y luego combina sus funciones para hacer un trabajo.Este artículo cubrió la jerarquía módulo / paquete / librería, cómo import trae funciones desde otros archivos, qué se ejecuta en el momento del import, el patrón __name__ == "__main__" para distinguir ejecuciones directas de imports, y la separación multi-módulo donde cada archivo tiene una responsabilidad. El siguiente artículo profundiza en los paquetes y el archivo __init__.py.
Verificación de conocimientos
Responde cada pregunta una a una.
Pregunta 2math_utility.py tiene print("hello") escrito a nivel superior. ¿Qué aparece en pantalla cuando otro archivo hace import math_utility?
Pregunta 3¿Cuál es el emparejamiento correcto entre ejecución directa e import de este código?if __name__ == "__main__":
print("hello")