App Logo
DjangoCode

Como funciona un programa python

Estimated learning time: 30 minutes

Cómo Python ejecuta tus programas

Sabias que cuando escribes código Python y le dices "¡corre!", ¿qué pasa exactamente dentro de tu computadora? En este artículo vas a entender el viaje completo que hace tu código: desde el momento en que lo escribes hasta que la máquina lo ejecuta. No necesitas experiencia previa — usaremos analogías simples para cada concepto.


El intérprete de Python

Todo comienza con el intérprete de Python. Pero, ¿qué es exactamente?

Imagina que tienes un texto escrito en español y necesitas que alguien que solo habla chino lo entienda. Necesitas un intérprete — una persona que lee tu español y lo traduce al chino en tiempo real.

Python funciona igual. Tu código está escrito en un lenguaje que los humanos podemos leer, pero tu computadora solo entiende ceros y unos (código máquina). El intérprete de Python es el programa que lee tu código y lo traduce para que la máquina lo pueda ejecutar.

El intérprete como traductor Tu código print("hola") x = 5 + 3 if x > 7: Intérprete Python Lee · Traduce Optimiza · Ejecuta python3 / CPython Tu computadora 01001000 01101111 01101100 01100001 ¡Resultado! hola x = 8 ✅

💡 El intérprete de Python se llama CPython (la implementación oficial, escrita en C). Cuando instalas Python desde python.org, estás instalando CPython.


Cómo se ejecuta un programa

La vista del programador

Desde tu perspectiva como programador, el proceso parece muy simple:

  1. Escribes tu código en un archivo .py
  2. Le dices a Python que lo ejecute
  3. Ves el resultado
bash
# Escribes tu código en hola.py
# Luego lo ejecutas así:
python3 hola.py

# Y ves el resultado:
# ¡Hola, mundo!

Parece magia, ¿verdad? Pero por dentro hay mucho más ocurriendo.


La vista de Python

Por dentro, Python hace dos grandes pasos antes de que veas cualquier resultado:

Los dos grandes pasos internos de Python PASO 1 — Compilación Tu archivo .py se convierte en Byte Code (.pyc) Un lenguaje intermedio, más rápido de procesar pero no binario puro PASO 2 — Ejecución (PVM) La Máquina Virtual de Python lee el Byte Code instrucción por instrucción y le dice a tu CPU qué hacer en cada momento

Flujo completo

hola.py tu código Compilador interno Python hola.pyc byte code (carpeta __pycache__) PVM máquina virtual Resultado en pantalla

Paso 1: El byte code

¿Qué es el byte code?

El byte code es una versión "a medias" de tu código. No es código humano (como tu .py) ni código máquina puro (ceros y unos). Es un lenguaje intermedio que Python entiende muy bien y puede ejecutar rápidamente.

Piénsalo así: si tu código .py es como una receta en español, el byte code es esa misma receta traducida a una versión simplificada y numerada, lista para seguir paso a paso sin ambigüedad.

# Tu código en hola.py
x = 5 + 3
print(x)

# El byte code equivalente (simplificado, no lo verás así)
LOAD_CONST   5
LOAD_CONST   3
BINARY_ADD
STORE_NAME   x
LOAD_GLOBAL  print
LOAD_NAME    x
CALL_FUNCTION 1

¿Dónde guarda Python el byte code?

Python guarda automáticamente los archivos .pyc en una carpeta llamada __pycache__ dentro de tu proyecto:

mi-proyecto/
├── hola.py
└── __pycache__/
    └── hola.cpython-312.pyc   ← byte code generado automáticamente

💡 Esto es una optimización: la próxima vez que ejecutes el mismo archivo, Python reutiliza el .pyc en lugar de recompilar desde cero. Si modificas tu .py, Python detecta el cambio y regenera el .pyc automáticamente.

🔴 Al igual que venv/, la carpeta __pycache__/ no debe subirse a GitHub. Agrégala a tu .gitignore.


Paso 2: La Máquina Virtual de Python (PVM)

¿Qué es la PVM?

La Python Virtual Machine (PVM) es el corazón del intérprete. Es un gran ciclo que lee cada instrucción del byte code y la ejecuta una por una.

No es una máquina física — es un programa dentro del intérprete que simula una computadora diseñada específicamente para entender byte code de Python.

Cómo trabaja la PVM (ciclo de ejecución) PVM — Máquina Virtual de Python 1. Leer 2. Decodificar 3. Ejecutar byte code resultado en pantalla

💡 La PVM es la razón por la que Python puede correr en cualquier sistema operativo. El byte code es siempre el mismo, y cada plataforma tiene su propia PVM que lo interpreta en la arquitectura local.


Variaciones del modelo de ejecución

El modelo que vimos (.py → byte code → PVM) es el estándar, pero no el único. Python tiene varias formas alternativas de ejecutarse según tus necesidades.

Variaciones del modelo de ejecución Estándar CPython .py → .pyc → PVM ✅ Más usado ✅ Referencia oficial python.org Jython Python en Java .py → Java bytecode → JVM de Java ↔ Integra con Java jython.org IronPython Python en .NET .py → .NET IL → CLR de .NET ↔ Integra con .NET ironpython.net PyPy Python ultra-rápido .py → JIT compiler → código máquina ⚡ Hasta 10x más rápido pypy.org

Implementaciones alternativas de Python

CPython — La implementación oficial

Es la que instalas desde python.org. Está escrita en el lenguaje de programación C y es el estándar de referencia. Cuando alguien dice "Python", casi siempre se refiere a CPython.

bash
# Verificar que tienes CPython
python3 --version
# Python 3.12.3  ← esto es CPython

Jython — Python en la JVM de Java

Jython compila tu código Python directamente a Java bytecode y lo ejecuta sobre la máquina virtual de Java (JVM). Esto significa que puedes usar librerías de Java directamente desde Python.

python
# Con Jython puedes usar librerías Java directamente
from java.util import ArrayList

lista = ArrayList()
lista.add("hola desde Python")
lista.add("usando clases de Java")
print(lista)

💡 Útil si trabajas en un entorno Java y quieres aprovechar el ecosistema de ambos lenguajes.

IronPython — Python en .NET

IronPython hace lo mismo pero para el ecosistema de Microsoft .NET. Compila Python al lenguaje intermedio de .NET (IL) y lo ejecuta sobre el CLR (Common Language Runtime).

python
# Con IronPython puedes usar librerías .NET
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import MessageBox

MessageBox.Show("¡Hola desde Python en .NET!")

💡 Ideal para integrar Python en aplicaciones Windows que ya usan C# o VB.NET.

PyPy — Python más rápido

PyPy es una implementación alternativa de Python enfocada en velocidad. Usa una técnica llamada JIT (Just-In-Time compilation): en lugar de interpretar el byte code instrucción por instrucción como CPython, PyPy analiza qué partes de tu código se ejecutan más veces y las compila directamente a código máquina nativo.

CPython vs PyPy — Diferencia de ejecución

CPython .py byte code .pyc PVM interpreta resultado Velocidad normal 🐢

PyPy .py JIT Compiler código máquina nativo Hasta 10× más rápido ⚡

💡 Para la mayoría de proyectos de principiantes, CPython es perfecto. PyPy brilla en programas que hacen muchos cálculos repetitivos (simulaciones, procesamiento masivo de datos).


Herramientas de optimización de ejecución

Cython — Lo mejor de dos mundos

Cython es una herramienta que te permite escribir código Python con algunas anotaciones de tipos, y compilarlo a código C nativo. El resultado es un archivo .so (en Linux/Mac) o .pyd (en Windows) que Python puede importar como si fuera un módulo normal.

python
# archivo: calculos.pyx  (sintaxis Cython)
def suma_rapida(int a, int b):   # nota los tipos "int"
    return a + b
bash
# Se compila a C y luego a código máquina
cython calculos.pyx
gcc -shared calculos.c -o calculos.so

# Y lo usas desde Python normal
python3 -c "import calculos; print(calculos.suma_rapida(3, 4))"
# 7
Flujo de Cython código.pyx Python+tipos Compilador Cython convierte a C código.c código C puro GCC/Clang compilador C del sistema .so / .pyd módulo nativo ⚡ velocidad C

Shedskin — Python a C++ automático

Shedskin analiza tu código Python y lo traduce automáticamente a C++, compilándolo a un ejecutable nativo. A diferencia de Cython no necesitas anotar tipos manualmente — los infiere solo.

python
# calculos.py — Python normal
def suma_lista(lista):
    total = 0
    for n in lista:
        total += n
    return total
bash
# Shedskin lo convierte a C++ y compila
shedskin calculos.py
make
./calculos   # ejecutable nativo, muy rápido

⚠️ Shedskin solo soporta un subconjunto de Python y no todas las librerías. Es útil para partes muy específicas de tu código donde la velocidad es crítica.


Binarios congelados (Frozen Binaries)

¿Qué son?

Un binario congelado es un archivo ejecutable que contiene todo lo necesario para correr tu programa Python sin que el usuario tenga Python instalado:

  • Tu código (en byte code)
  • El intérprete de Python
  • Todas las librerías que usas

Todo empaquetado en un solo archivo .exe (Windows), app (macOS) o binario (Linux).

Qué contiene un binario congelado mi-app.exe (binario congelado) Tu código main.pyc utils.pyc modelos.pyc (byte code) Intérprete Python PVM completa sin instalación necesaria Librerías requests, pandas… todo lo que tu programa necesita

Herramientas para crear binarios congelados

HerramientaSistemasComando básico
PyInstallerWin, Mac, Linuxpyinstaller --onefile main.py
cx_FreezeWin, Mac, Linuxcxfreeze main.py
py2exeSolo Windowspython setup.py py2exe
py2appSolo macOSpython setup.py py2app
bash
# Ejemplo con PyInstaller (el más popular)
pip install pyinstaller

# Crear un solo ejecutable
pyinstaller --onefile mi_app.py

# El ejecutable quedará en la carpeta dist/
ls dist/
# mi_app   (en Linux/Mac) o  mi_app.exe  (en Windows)

💡 Los binarios congelados son útiles cuando quieres distribuir tu programa a personas que no saben programar y no tienen Python instalado — como una aplicación de escritorio normal.

⚠️ El archivo resultante puede ser grande (30–100 MB) porque incluye el intérprete completo.


Otras opciones de ejecución

Además del modelo estándar, Python puede ejecutarse de otras formas menos conocidas pero muy útiles:

Modo interactivo (REPL)

El REPL (Read-Eval-Print Loop) es el intérprete interactivo que ya conoces. Puedes ejecutar código línea a línea sin crear un archivo.

bash
python3
>>> 2 + 2
4
>>> nombre = "Ana"
>>> print(f"Hola {nombre}")
Hola Ana
>>> exit()

💡 Ideal para experimentar y aprender. Prueba una idea rápidamente antes de escribirla en un archivo.

Ejecución como módulo con -m

Python puede ejecutar módulos directamente con la opción -m:

bash
# En lugar de escribir el path completo a un script
python3 -m http.server 8080       # levanta un servidor web simple
python3 -m json.tool archivo.json # formatea un JSON bonito
python3 -m venv mi-entorno        # crea un entorno virtual
python3 -m pip install requests   # instala un paquete

Código inline con -c

Puedes ejecutar una línea de Python directamente desde la terminal:

bash
python3 -c "print('Hola sin crear archivo')"
# Hola sin crear archivo

python3 -c "import sys; print(sys.version)"
# 3.12.3 (main, ...)

Jupyter Notebooks

Jupyter es un entorno que permite mezclar código Python, texto explicativo, imágenes y gráficas en un solo documento interactivo .ipynb.

bash
pip install jupyter
jupyter notebook
# Abre el navegador con un editor interactivo

💡 Muy popular en ciencia de datos, investigación y educación.

Formas de ejecutar Python — resumen Archivo .py python3 app.py La forma estándar ✅ Recomendado REPL python3 Interactivo 🧪 Para explorar Módulo -m python3 -m mod Herramientas 🔧 Para utilidades Jupyter Notebook .ipynb Código + texto 📊 Para datos/ciencia

Posibilidades futuras

Python sigue evolucionando activamente. Algunas direcciones que se están explorando:

Subintérpretes y paralelismo real

Históricamente, Python tiene una limitación llamada GIL (Global Interpreter Lock): aunque tu computadora tenga muchos núcleos, Python solo puede ejecutar un hilo a la vez con el intérprete estándar. Los equipos de desarrollo están trabajando en subintérpretes que permitirían paralelismo real en CPython.

python
# Hoy (limitado por GIL)
import threading
# Los hilos comparten el mismo intérprete

# Futuro (en desarrollo con PEP 703)
# Cada subintérprete correría verdaderamente en paralelo

Python sin GIL (PEP 703)

La PEP 703 propone hacer el GIL opcional en CPython. En Python 3.13 ya existe como experimento:

bash
# Python 3.13+ experimental
python3.13 -X nogil mi_programa.py

Compilación JIT nativa en CPython

CPython 3.13 incluye un compilador JIT experimental (similar a PyPy) que puede acelerar código Python sin necesidad de cambiar a otra implementación.

WebAssembly (Pyodide)

Pyodide permite ejecutar Python directamente en el navegador web a través de WebAssembly, sin necesidad de un servidor:

html
<!-- Python corriendo en el navegador -->
<script src="pyodide.js"></script>
<script>
  pyodide.runPython(`
    import sys
    print(sys.version)
  `);
</script>
El futuro de la ejecución de Python Sin GIL PEP 703 Paralelismo real en múltiples núcleos Python 3.13+ JIT en CPython Compilación just-in-time nativa sin cambiar impl. Python 3.13+ exp. WebAssembly Pyodide Python en el navegador web Ya disponible Subintérpretes Múltiples instancias Python en el mismo proceso En desarrollo

Resumen: el viaje completo de tu código

El viaje completo de tu código Python 1 Tú escribes código fuente Archivo .py con instrucciones legibles por humanos: print("hola"), x = 5, if condicion:... 2 Python compila a byte code El compilador interno convierte tu .py en instrucciones intermedias (.pyc) guardadas en __pycache__/ 3 La PVM ejecuta el byte code La Máquina Virtual de Python lee cada instrucción del byte code y le dice a la CPU qué hacer 4 ¡Ves el resultado en pantalla! ✅ Tu programa corre: imprime texto, calcula números, lee archivos, navega internet…

Preguntas frecuentes

¿Necesito saber todo esto para programar en Python? No. Como principiante solo necesitas saber que escribes un .py y lo ejecutas con python3. Todo lo demás ocurre automáticamente. Este conocimiento es útil cuando quieras entender por qué Python se comporta como lo hace o cuando necesites optimizar.

¿Por qué Python es más lento que C? Porque C se compila directamente a código máquina nativo, mientras que Python pasa por la capa extra de la PVM. Esta flexibilidad tiene un costo de velocidad, pero a cambio gana en portabilidad y facilidad de uso.

¿Qué es __pycache__ y puedo borrarlo? Es la carpeta donde Python guarda los archivos .pyc. Puedes borrarla sin problema — Python la regenera la próxima vez que ejecutes tu código.

¿Debo aprender PyPy o Cython desde el principio? No. Empieza con CPython (el estándar). Solo cuando tengas un programa funcionando y notes que es lento, considera alternativas de optimización.


Ahora que entiendes cómo Python ejecuta tus programas por dentro, el siguiente paso es aprender los tipos de datos fundamentales: números, cadenas de texto, listas y diccionarios.

Comments (0)
Loading comments...