Python Módulo 1 – Primeros pasos: instalar, ejecutar y leer Python
Qué es Python y cómo ejecuta tu código
Qué pasa cuando ejecutas un archivo .py (CPython lo compila a bytecode y lo ejecuta), cuánto tiempo se mantiene cada versión y qué implementaciones existen.
Qué vas a aprender
- Explicar qué hace el intérprete cuando ejecuta un archivo .py
- Encontrar dónde guarda CPython el bytecode de un módulo importado, y cuándo vuelve a compilarlo
- Reconocer si una versión es de funcionalidades o de corrección de errores, y cuánto tiempo recibe soporte
- Distinguir CPython de otras implementaciones como PyPy y Pyodide
Qué vas a aprender
Qué vas a aprender
- Explicar qué hace el intérprete cuando ejecuta un archivo .py
- Encontrar dónde guarda CPython el bytecode de un módulo importado, y cuándo vuelve a compilarlo
- Reconocer si una versión es de funcionalidades o de corrección de errores, y cuánto tiempo recibe soporte
- Distinguir CPython de otras implementaciones como PyPy y Pyodide
En esta página
Un archivo de tres líneas con un ) de más en su última línea no imprime nada, mientras que el mismo archivo con una división entre cero en esa línea imprime sus dos primeras líneas antes de detenerse. La diferencia viene de los dos pasos de ejecutar un archivo: Python primero lo compila entero y después lo ejecuta.
Python is a general-purpose programming language with a small, readable syntax: blocks are marked by indentation rather than braces, and you do not declare the types of variables. It comes with a large standard library: The modules that come with Python itself, such as json, pathlib and sqlite3, documented in the library reference. sys.stdlib_module_names lists their names for the Python that runs, whether or not each one works there. More in “A tour of the Python standard library” (en inglés), so many everyday jobs (reading files, handling dates, talking to the web) need nothing extra. People use it for scripts and automation, web back ends, data analysis, machine learning, teaching and much more. “Python” names two things: the language (the rules for what a program means, written down in the language reference) and the implementation: A program that runs code written in Python, such as CPython, PyPy or MicroPython. The language reference says what code means; each implementation decides how to run it and fills in what the reference leaves open, such as when objects are freed., the program that actually runs your code. Most of the time the implementation is CPython, and this lesson is about what it does.
Ejecutar un archivo lo compila entero antes de que se ejecute ninguna línea
Cuando ejecutas python3 hello.py, pasan tres cosas, en este orden:
- El intérprete lee tu código fuente, el texto de
hello.py. - Compila el archivo entero a Las instrucciones compactas en las que CPython compila un archivo de Python antes de ejecutarlas en su máquina virtual. Cambian de una versión de funcionalidades a la siguiente, y el módulo dis las muestra.: instrucciones compactas para la máquina virtual propia de Python. Si el archivo tiene un error de sintaxis, se detiene aquí, antes de que se ejecute una sola línea.
- Después, la La parte de CPython que ejecuta el bytecode, una instrucción tras otra. Los errores que solo aparecen mientras el programa se ejecuta, como una división entre cero, se lanzan aquí. ejecuta el bytecode, una instrucción tras otra. Los errores que solo aparecen mientras el programa se ejecuta, como dividir entre cero, ocurren en este paso.
Lo que hace CPython cuando ejecutas un archivo
Descripción en texto del diagrama
El diagrama muestra los tres pasos de ejecutar python3 hello.py, de arriba abajo.
- Python lee el código fuente de hello.py.
- El compilador convierte el archivo entero en bytecode, instrucciones para la máquina virtual de Python. Un SyntaxError detiene el programa en este paso, antes de que se ejecute ninguna de sus líneas.
- La máquina virtual ejecuta el bytecode, una instrucción tras otra, y aparece la salida del programa. Un ZeroDivisionError y los demás errores que solo aparecen mientras el programa se ejecuta ocurren en este paso.
Estos son los dos archivos del principio de la lección. Solo se diferencian en la línea 3: uno divide entre cero y el otro tiene un ) de más. Mira la salida de cada pestaña y después recorre paso a paso lo que hace CPython con los dos archivos:
Una división entre cero · late_zero_division.py
print("Line 1 ran")
print("Line 2 ran")
print(10 / 0) Salida (código de salida 1)
Line 1 ran Line 2 ran
Impreso como error (salida de errores estándar)
Traceback (most recent call last):
File "late_zero_division.py", line 3, in <module>
print(10 / 0)
~~~^~~
ZeroDivisionError: division by zero
Salida registrada con Python 3.14.8 en macOS 26 arm64. Para ejecutarlo tú: mise exec python@3.14.8 -- python3 late_zero_division.py
Un paréntesis de más · late_syntax_error.py
print("Line 1 ran")
print("Line 2 ran")
print(10 / 2)) Salida (código de salida 1)
Impreso como error (salida de errores estándar)
File "late_syntax_error.py", line 3
print(10 / 2))
^
SyntaxError: unmatched ')'
Salida registrada con Python 3.14.8 en macOS 26 arm64. Para ejecutarlo tú: mise exec python@3.14.8 -- python3 late_syntax_error.py
Se ejecuta en este dispositivo, en tu navegador. La primera ejecución descarga Python (unos 13.5 MB), que se guarda para las siguientes.
Tu ejecución, en este navegador
El dibujo muestra la escena completa; sus 7 pasos aparecen abajo.
Todos los pasos en texto
- Leer el primer archivo. python3 late_zero_division.py hace que CPython lea las tres líneas del archivo antes de hacer nada con ellas.
- Compilar las tres líneas. El compilador comprueba la gramática de cada línea y convierte el archivo en bytecode. print(10 / 0) es gramática correcta, así que la compilación sale bien.
- Se ejecutan las líneas 1 y 2. La máquina virtual ejecuta el bytecode en orden, así que las llamadas a print() de las líneas 1 y 2 escriben sus dos líneas.
- La línea 3 falla al ejecutarse. Solo ahora se ejecuta la división entre cero. El ZeroDivisionError viene de la máquina virtual, después de imprimirse dos líneas, y el traceback señala la línea 3.
- El segundo archivo. python3 late_syntax_error.py lee tres líneas que solo se diferencian en la línea 3, que tiene un ) de más: print(10 / 2)).
- La compilación se detiene en la línea 3. El compilador lee las tres líneas antes de que se ejecute nada, encuentra el paréntesis de más y se detiene con un SyntaxError. No se genera bytecode.
- No se imprimió nada. Las líneas 1 y 2 nunca se ejecutaron, así que la única salida es el informe del error. Un error de gramática en cualquier parte de un archivo impide que se ejecute cualquiera de sus líneas.
La división es gramática correcta, así que el archivo entero se compiló y sus dos primeras líneas se ejecutaron antes de que la máquina virtual llegara a la línea 3. El paréntesis de más rompió la gramática, así que la compilación se detuvo y no se ejecutó nada, ni siquiera la línea 1. Abre la segunda pestaña, pulsa Editar, borra el ) de más y pulsa Ejecutar: ahora se imprimen las tres líneas.
Idea clave
CPython compila el archivo entero antes de ejecutar nada: un error de gramática en cualquier parte detiene el archivo antes de su primera línea, mientras que un error en tiempo de ejecución solo lo detiene cuando se llega a su línea.
No hay una orden separada de “compilar y después ejecutar”, como en C o en Java: los dos pasos ocurren cada vez que ejecutas el archivo. El módulo dis de la biblioteca estándar (abreviatura de disassembler, desensamblador) te muestra el bytecode de una función:
import dis
def add(a, b):
return a + b
dis.dis(add) Salida
4 RESUME 0
5 LOAD_FAST_BORROW_LOAD_FAST_BORROW 1 (a, b)
BINARY_OP 0 (+)
RETURN_VALUE
Salida registrada con Python 3.14.8 en macOS 26 arm64. Para ejecutarlo tú: mise exec python@3.14.8 -- python3 show_bytecode.py
Cada línea de la salida es una instrucción. RESUME es contabilidad interna al principio de cada función; después, la máquina virtual toma los dos argumentos, los suma con el operador + y devuelve el resultado. Nunca necesitas leer bytecode para escribir Python, pero explica por qué un error de sintaxis en cualquier parte de un archivo impide que se ejecute el archivo entero.
Nota de versión
El bytecode es un detalle de CPython, no forma parte del lenguaje: sus instrucciones cambian de una versión de funcionalidades a la siguiente. La salida de arriba es lo que imprime CPython 3.14; nunca escribas código que dependa de ella.
Punto de control
Comprueba: compilar el archivo entero y después ejecutarlo
Los módulos importados guardan su bytecode para la siguiente ejecución
Cuando un programa importa un módulo (otro archivo .py), CPython guarda el bytecode de ese módulo en una carpeta llamada La carpeta en la que CPython guarda el bytecode de los módulos importados, en archivos como greeting.cpython-314.pyc. Un archivo se vuelve a compilar cuando cambia su código fuente, y la carpeta se puede borrar sin problema. junto a él, para que la siguiente ejecución no tenga que volver a compilarlo. Aquí tienes un programa en dos archivos: main.py, el programa que ejecutas, y greeting.py, el módulo que importa.
cache_demo/main.py
import greeting
print(greeting.greet("Asha")) Salida
Hello, Asha!
Salida registrada con Python 3.14.8 en macOS 26 arm64. Para ejecutarlo tú: mise exec python@3.14.8 -- python3 main.py
cache_demo/greeting.py
def greet(name):
return "Hello, " + name + "!" Después de que python3 main.py se haya ejecutado una vez, __pycache__ contiene greeting.cpython-314.pyc. La parte cpython-314 dice qué implementación y qué versión lo escribieron, para que varias versiones de Python puedan compartir una carpeta sin mezclar sus archivos. El archivo que ejecutas directamente, main.py, se compila cada vez y no se guarda en caché.
Antes de usar un archivo de caché, CPython comprueba que sigue coincidiendo con su código fuente. Cuando escribe el archivo, anota dentro la fecha de última modificación y el tamaño del código fuente; si alguno ha cambiado desde entonces, el módulo se vuelve a compilar y el archivo de caché se sustituye. Recorre tres ejecuciones del programa, con un cambio en greeting.py antes de la tercera:
El dibujo muestra la escena completa; sus 8 pasos aparecen abajo.
Todos los pasos en texto
- Ejecución 1: main.py. python3 main.py compila main.py, el archivo que ejecutas. Su bytecode se usa solo en esta ejecución y nunca se guarda.
- Ejecución 1: import greeting. La línea 1 importa greeting. Todavía no hay ninguna copia en caché, así que CPython compila también greeting.py.
- Ejecución 1: se escribe la caché. CPython guarda el bytecode de greeting.py en __pycache__, en un archivo con el nombre de la implementación y la versión que lo escribieron, con la fecha de modificación y el tamaño del código fuente anotados dentro.
- Ejecución 2: main.py otra vez. El segundo python3 main.py vuelve a compilar main.py, como hace cada ejecución: el archivo que ejecutas nunca se guarda en caché.
- Ejecución 2: se usa la caché. La importación encuentra greeting.cpython-314.pyc. La fecha y el tamaño anotados coinciden con greeting.py, así que CPython carga el bytecode y no compila greeting.py.
- Editas greeting.py. Al guardar greeting.py, el archivo recibe una nueva fecha de modificación, así que ya no coincide con la anotada en el archivo de caché.
- Ejecución 3: se vuelve a compilar. En la siguiente importación, CPython ve la diferencia y vuelve a compilar greeting.py. Borrar __pycache__ tendría el mismo efecto.
- Ejecución 3: un archivo de caché nuevo. El bytecode nuevo sustituye al archivo antiguo, con la nueva fecha y el nuevo tamaño dentro, para que la siguiente ejecución pueda volver a cargarlo sin compilar.
La segunda ejecución cargó el bytecode de la caché, y el cambio hizo que la tercera volviera a compilar greeting.py, sin que nadie borrara nada. La parte del nombre que dice qué Python escribió el archivo es la etiqueta de caché del Python que se ejecuta, y la biblioteca estándar puede calcular la ruta completa para cualquier archivo fuente:
import importlib.util
import sys
print("Cache tag:", sys.implementation.cache_tag)
print(importlib.util.cache_from_source("greeting.py")) Salida
Cache tag: cpython-314 __pycache__/greeting.cpython-314.pyc
Salida registrada con Python 3.14.8 en macOS 26 arm64. Para ejecutarlo tú: mise exec python@3.14.8 -- python3 cache_name.py
Se ejecuta en este dispositivo, en tu navegador. La primera ejecución descarga Python (unos 13.5 MB), que se guarda para las siguientes.
Tu ejecución, en este navegador
Pulsa Editar, pide "marks.py" en lugar de "greeting.py" y vuelve a ejecutarlo: la carpeta y la etiqueta se mantienen, solo cambia el nombre del módulo.
Esperar que la caché haga que un programa se ejecute más rápido
Un archivo .pyc en caché solo ahorra la compilación, una vez por cada cambio del módulo. El tutorial de Python señala que un programa no se ejecuta más rápido desde un archivo .pyc que desde su archivo .py; solo se carga más rápido. Así que subir __pycache__ a un proyecto no aporta nada: CPython escribe la caché él solo la primera vez que importa cada módulo.
Puedes borrar las carpetas __pycache__ cuando quieras; Python las vuelve a escribir cuando las necesita. Déjalas fuera del control de versiones (añade __pycache__/ a tu .gitignore).
Punto de control
Comprueba: la caché de bytecode de los módulos importados
Una versión de funcionalidades cada año, cada una con correcciones durante cinco años
Todo el código actual de Python es Python 3. Python 2 no recibe correcciones desde hace años, pero su código todavía aparece en respuestas antiguas en internet, y falla en Python 3:
# Python 2 code that still turns up in old answers online
print "Hello, world" Salida (código de salida 1)
Impreso como error (salida de errores estándar)
File "python2_print.py", line 2
print "Hello, world"
^^^^^^^^^^^^^^^^^^^^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?
Salida registrada con Python 3.14.8 en macOS 26 arm64. Para ejecutarlo tú: mise exec python@3.14.8 -- python3 python2_print.py
Python 3 informa de un SyntaxError e incluso sugiere la solución: print es una función, así que necesita paréntesis. Otras señales de código de Python 2 son raw_input() (ahora input()) y xrange() (ahora range()).
Dentro de Python 3, las versiones se numeran 3.menor.micro:
- Una Una versión de Python que añade funcionalidades al lenguaje, como 3.14 o 3.15. Sale una cada año y recibe soporte durante cinco años: unos dos de versiones de corrección de errores y después solo correcciones de seguridad. (3.13, 3.14, 3.15…) añade funcionalidades al lenguaje y llega más o menos una vez al año.
- Después, cada versión de funcionalidades recibe Una versión como 3.14.8 que corrige errores de una versión de funcionalidades y no cambia ninguna de sus funcionalidades, así que el código escrito para 3.14.2 normalmente funciona en ella sin cambios. (3.14.1, 3.14.2…) durante unos dos años, y después solo correcciones de seguridad, hasta unos cinco años después de su salida. La Python Developer’s Guide recoge el estado de cada versión.
- Una versión de corrección de errores no cambia funcionalidades, así que el código escrito para 3.14.2 normalmente funciona sin cambios en 3.14.8.
El ciclo anual, descrito en la PEP 602, da a cada versión de funcionalidades la misma vida. Recorre las fases de una, 3.14, desde su primera versión alfa hasta su fin de vida:
- 3.14.0a1
Las versiones alfa añaden las funcionalidades nuevas funcionalidades nuevas
Durante unos siete meses, versiones alfa numeradas añaden las funcionalidades nuevas una a una, con correcciones de errores. Una alfa indica alpha en sys.version_info.releaselevel.
- 3.14.0b1
Las versiones beta congelan las funcionalidades
A partir de la primera de las cuatro betas no se puede añadir ninguna funcionalidad nueva, solo correcciones de errores, para que los proyectos puedan probar su código con lo que se va a publicar.
- 3.14.0rc1
Candidatas a versión final
Siguen al menos dos candidatas a versión final. Su nivel de versión es candidate; la última se convierte en la versión de funcionalidades.
- 3.14.0
La versión de funcionalidades
3.14.0 sale un año después de 3.13.0, y aquí empiezan sus cinco años de soporte. Su nivel de versión es final.
- 3.14.1, 3.14.2 …
Versiones de corrección de errores durante dos años sin funcionalidades nuevas
Más o menos cada dos meses, una versión de corrección de errores corrige fallos, con instaladores nuevos, y no cambia ninguna funcionalidad. Los ejemplos de este curso se ejecutan en una de ellas, 3.14.8.
- Solo seguridad
Correcciones de seguridad durante tres años más
Pasados dos años, solo se hacen correcciones de seguridad, como versiones de solo código fuente cuando hacen falta, y ya no hay instaladores nuevos.
- Fin de vida
Cinco años después de 3.14.0
El soporte termina. Los programas siguen funcionando, pero ya no se corrige nada del intérprete ni de su biblioteca estándar para 3.14, así que pasa a una versión de funcionalidades más nueva antes de esa fecha.
La cronología tiene 7 momentos, de 3.14.0a1 al fin de vida.
Las fases anteriores a la versión de funcionalidades son para hacer pruebas; tu código debe ir en una versión final que todavía tenga soporte. Un programa puede leer qué versión de funcionalidades lo ejecuta, y en qué fase de esa vida está, en sys.version_info:
import sys
major, minor = sys.version_info.major, sys.version_info.minor
print("Feature release:", f"{major}.{minor}")
print("Release level:", sys.version_info.releaselevel) Salida
Feature release: 3.14 Release level: final
Salida registrada con Python 3.14.8 en macOS 26 arm64. Para ejecutarlo tú: mise exec python@3.14.8 -- python3 version_parts.py
Se ejecuta en este dispositivo, en tu navegador. La primera ejecución descarga Python (unos 13.5 MB), que se guarda para las siguientes.
Tu ejecución, en este navegador
Este curso está escrito para Python 3.14, y sus ejemplos se ejecutan con CPython 3.14.8.
Punto de control
Comprueba: versiones de funcionalidades, versiones de corrección y soporte
CPython ejecuta tu código, y otras implementaciones lo ejecutan en otros lugares
El Python que descargas de python.org es CPython, la implementación de referencia, escrita en C. Otras ejecutan el mismo lenguaje en otros lugares:
- PyPy añade un Un compilador que convierte en código máquina las partes de un programa que más se ejecutan, mientras el programa se ejecuta, para que esas partes vayan más rápido cuanto más tiempo lleva en marcha., que puede hacer mucho más rápidos los programas que se ejecutan durante mucho tiempo.
- MicroPython es un Python pequeño para microcontroladores.
- Pyodide is CPython compiled to WebAssembly: A portable binary format for programs, which browsers and runtimes such as Node.js run in a sandbox. Programs written in C, such as CPython, can be compiled to it., so it runs inside a web browser, on your own device.
Un programa puede preguntar qué implementación, qué versión y qué plataforma lo están ejecutando:
import sys
print("Implementation:", sys.implementation.name)
print("Version:", sys.version.split()[0])
print("Platform:", sys.platform) Salida
Implementation: cpython Version: 3.14.8 Platform: darwin
Salida registrada con Python 3.14.8 en macOS 26 arm64. Para ejecutarlo tú: mise exec python@3.14.8 -- python3 runtime_info.py
Se ejecuta en este dispositivo, en tu navegador. La primera ejecución descarga Python (unos 13.5 MB), que se guarda para las siguientes.
Tu ejecución, en este navegador
Nota de versión
El Compilador de Python en línea (en inglés) de este sitio ejecuta Pyodide 314.0.7 en tu navegador, y Pyodide 314.0.7 contiene CPython 3.14.2, así que la versión que indica es 3.14.2. Su plataforma es emscripten, el nombre de Python compilado con Emscripten para WebAssembly. Los dos son Python 3.14, así que los ejemplos de este curso se comportan igual en ambos, salvo que una lección diga lo contrario.
En tu navegador, Pyodide 314.0.7 (CPython 3.14.2) imprime:
Implementation: cpython Version: 3.14.2 Platform: emscripten
Pulsa Ejecutar y compara las dos respuestas. El Python del navegador sigue llamándose cpython, porque Pyodide es CPython compilado para el navegador; solo la plataforma dice dónde se ejecuta. Cada implementación pone su propio nombre en sys.implementation.name, siempre en minúsculas, así que un programa que necesite saberlo pregunta ahí, y pregunta a sys.platform cuando necesita saber si se ejecuta en un navegador.
Punto de control
Comprueba: CPython y las otras implementaciones
Practica: informa de qué Python se ejecuta
Escribe describe_runtime(), que le dice a un programa qué implementación y qué versión de funcionalidades lo ejecutan y si se ejecuta en un navegador. Sus pruebas de ejemplo se ejecutan aquí, en tu navegador, así que aquí la respuesta a “¿en un navegador?” es True:
Ejercicio · Fácil · Python
Informa de qué Python se está ejecutando
Escribe una función describe_runtime() que le diga a un programa qué Python lo está ejecutando. No recibe argumentos y devuelve un diccionario con exactamente tres claves:
"implementation": el nombre de la implementación en minúsculas, como"cpython"(desys.implementation.name);"major_minor": la versión de funcionalidades como texto, como"3.14", construida con los números desys.version_info;"in_browser":Truecuando el programa se ejecuta en un navegador web yFalseen caso contrario. Pyodide, el Python del navegador, indicasys.platformcomo"emscripten".
En CPython 3.14.8, en una computadora portátil, devuelve:
{'implementation': 'cpython', 'major_minor': '3.14', 'in_browser': False}
Las pruebas de ejemplo importan tu función de describe.py, la llaman y comprueban cada una de las tres entradas. Cuando las ejecutas aquí, se ejecutan en tu navegador, así que in_browser debería ser True.
Código inicial · describe.py
import sys
def describe_runtime():
"""Return which Python runs this program: its implementation, feature release and whether it runs in a browser."""
# Replace this line with your code.
return {} Las pruebas de ejemplo · test_describe.py
import sys
from describe import describe_runtime
def test_three_keys():
"""returns a dictionary with exactly the three keys"""
result = describe_runtime()
assert isinstance(result, dict)
assert sorted(result) == ["implementation", "in_browser", "major_minor"]
def test_implementation():
"""names the implementation in lower case"""
assert describe_runtime()["implementation"] == sys.implementation.name
def test_major_minor():
"""gives the feature release as text, such as 3.14"""
expected = f"{sys.version_info.major}.{sys.version_info.minor}"
assert describe_runtime()["major_minor"] == expected
def test_in_browser():
"""says whether the program runs in a browser, as True or False"""
assert describe_runtime()["in_browser"] is (sys.platform == "emscripten") Una pista
sys.version_info.major y sys.version_info.minor son números: únelos en un texto con una f-string como f"{major}.{minor}". Una comparación como sys.platform == "emscripten" ya es True o False, así que puede ser el valor de "in_browser" tal cual.
Resultados de las pruebas de ejemplo
| Prueba | Resultado | Detalles |
|---|
Lo que imprimió tu código
Las pruebas de ejemplo se ejecutan en este dispositivo, en tu navegador (Pyodide): no se envía nada a mysmartcopilot.com. La primera ejecución descarga Python (unos 13.5 MB), que se guarda para las siguientes. Una comprobación en tu navegador es una orientación para ti, no la prueba de que el código sea correcto con cualquier entrada.
Para terminar, una ronda de preguntas sobre la compilación, la caché, las versiones y las implementaciones. La de las cuatro que peor respondas es la que se pregunta primero, y cada respuesta se explica en cuanto la das:
Práctica que se adapta a ti
Practica esta lección
12 preguntas sobre 4 ideas de esta lección. Cada respuesta se explica al momento, y lo que aciertas se guarda en este navegador.
Preguntas de entrevista
Calentamiento (júnior): ¿Python es un lenguaje compilado o interpretado?
Ninguna de las dos palabras describe el lenguaje en sí: compilar e interpretar es lo que hace una implementación, y CPython hace las dos cosas. Cuando ejecutas un archivo, primero compila el archivo entero a bytecode, instrucciones para su propia máquina virtual; por eso un error de sintaxis en la última línea detiene el archivo antes de su primera línea. Después, la máquina virtual interpreta ese bytecode, una instrucción cada vez, y ahí es donde aparecen los errores en tiempo de ejecución, como una división entre cero. El bytecode de los módulos importados se guarda en caché en __pycache__, así que las ejecuciones siguientes no tienen que compilarlos, pero nada se convierte en código máquina por adelantado, como haría un compilador de C. Otras implementaciones son distintas: PyPy añade un compilador just-in-time que convierte en código máquina el código que más se ejecuta, mientras el programa se ejecuta.
Dos preguntas más difíciles parten de esta lección: un bytecode que sobrevivió a una corrección, y una versión de Python cuyo soporte ha terminado. Piensa tu primer paso antes de abrir cada una:
Las respuestas modelo se abren con cualquier pase: 79 ₹ por 1 semana (2,99 US$), un solo pago que nunca se renueva.
-
De nivel medio a sénior
Se desplegó una corrección de un solo carácter en pricing.py, pero el servicio se comporta como el código antiguo hasta que alguien borra __pycache__. El despliegue escribe todos los archivos con una misma fecha de modificación fija, para tener compilaciones reproducibles, y conserva __pycache__ en un volumen entre despliegues. Explica qué pasó y cómo harías que no pudiera volver a pasar.
-
De júnior a nivel medio
Un servicio todavía funciona en una versión de funcionalidades de Python que llegó a su fin de vida el mes pasado, y todo funciona. Tu jefe pregunta si la actualización puede esperar otro año. ¿Qué respondes y cómo planificarías el cambio a una versión con soporte?
Para recordar
- Ejecutar un archivo
.pylo compila a bytecode y después ejecuta el bytecode en la máquina virtual de CPython; un error de sintaxis detiene el archivo antes de que se ejecute nada. - Los módulos importados guardan su bytecode en
__pycache__; los archivos se pueden borrar sin problema y no van en el control de versiones. CPython vuelve a compilar un módulo cuando ha cambiado la fecha de modificación o el tamaño de su código fuente. - Las versiones de funcionalidades llegan más o menos una vez al año y tienen soporte durante unos cinco años; las versiones de corrección de errores no cambian funcionalidades. Este curso usa Python 3.14.
- CPython es la implementación de referencia; PyPy, MicroPython y Pyodide ejecutan el mismo lenguaje en otros lugares.
Tarjetas · 4 tarjetas
Repaso rápido
Di la respuesta para ti antes de mirarla: recordarla es lo que hace que se quede.
-
¿Qué hace CPython con un archivo .py antes de ejecutar ninguna de sus líneas?
Compila el archivo entero a bytecode para su máquina virtual. Un error de sintaxis en cualquier parte del archivo lo detiene en este paso, antes de que se ejecute nada.
-
¿Dónde guarda CPython el bytecode de un módulo que importas?
En una carpeta __pycache__ junto al módulo, en un archivo como greeting.cpython-314.pyc. El script que ejecutas directamente no se guarda en caché.
-
¿Cuánto tiempo tiene soporte una versión de funcionalidades de Python?
Unos dos años de versiones de corrección de errores y después solo correcciones de seguridad, hasta unos cinco años después de su primera versión.
-
¿Qué es Pyodide?
CPython compilado a WebAssembly, para que Python pueda ejecutarse dentro de un navegador web, en tu propio dispositivo.
Referencias
- El tutorial de Python: abriendo el apetito (en inglés) (Python Software Foundation)
- El tutorial de Python: cómo usar el intérprete de Python (en inglés) (Python Software Foundation)
- dis, el desensamblador del bytecode de Python (en inglés) (Python Software Foundation)
- El tutorial de Python: archivos de Python compilados (en inglés) (Python Software Foundation)
- El sistema de importación: invalidación del bytecode en caché (en inglés) (Python Software Foundation)
- PEP 3147: directorios de repositorio PYC (en inglés) (Python Software Foundation)
- importlib.util.cache_from_source() (en inglés) (Python Software Foundation)
- Estado de las versiones de Python (Python Developer's Guide, en inglés) (Python Software Foundation)
- PEP 602: ciclo anual de versiones de Python (en inglés) (Python Software Foundation)
- sys.implementation, sys.version_info y sys.platform (en inglés) (Python Software Foundation)
- Documentación de Pyodide (en inglés) (Pyodide)
- PyPy: una implementación alternativa de Python, rápida y compatible (en inglés) (The PyPy Project)
- MicroPython: Python para microcontroladores (en inglés) (MicroPython)
Herramientas relacionadas
Informar de un problema con esta lección (en inglés)
Solo se guarda en este navegador. Tu progreso en Learn (en inglés)