Читать книгу Python a fondo - Óscar Ramírez Jiménez - Страница 61
1.15.1 Estructura del intérprete de Python
ОглавлениеPor un lado, está el código fuente, que se compone de ficheros de texto plano que tienen una gramática específica (que se denomina lenguaje Python), con una extensión concreta (.py) y estructurados de una forma precisa.
Por otro lado, se encuentran los ficheros de byte code, que son el resultado de una compilación rápida que se efectúa justo antes de comenzar la ejecución. El código escrito en byte code está listo para ser ejecutado en cualquier máquina virtual de Python.
Por último, se encuentra la máquina virtual de Python (PVM – Python Virtual Machine), que es la encargada de ejecutar los ficheros que tienen el byte code en la máquina. Por lo tanto, la parte que sí es dependiente del hardware utilizado es la máquina virtual, y es la que normalmente debe ser compilada cuando se instala Python por primera vez.
Lo que se denomina intérprete de Python es el programa completo que analiza el código fuente, genera los ficheros compilados y ejecuta el código usando la máquina virtual.
Figura 1.13 Estructura de ejecución de un programa en Python.
Cabe destacar algunas peculiaridades del byte code:
• Los ficheros que contienen el byte code tienen una extensión. pyc (Python compiled).
• Los ficheros no son necesarios para la ejecución del programa, dado que, si no se pueden generar por algún motivo (por falta de espacio o de permisos de escritura), el byte code será generado e insertado en memoria directamente, sin crearse en ficheros guardados en el sistema operativo.
• Un programa en Python que tenga los ficheros . pyc generados no necesita tener el código fuente, por lo que se puede ahorrar espacio de disco borrando los códigos fuente y solo ejecutando los .pyc. Esta práctica solo se recomienda en sistemas con grandes restricciones de espacio, dado que desde los ficheros byte code no se puede generar el código original.
• El intérprete de Python es inteligente a la hora de generar los .pyc, y si ya se han generado los ficheros pyc y no ha habido cambios en el fichero fuente, no realiza ninguna compilación, simplemente usa los ficheros ya compilados, agilizando así el proceso de iniciar la aplicación.
Como en cualquier otro proceso de compilación, cuando se lanza un programa usando el intérprete de Python, se pueden configurar los parámetros de forma que:
• Eviten que se generen los .pyc (opción –B).
• Se puedan ejecutar módulos directamente (opción –m).
• Se pueda pasar el programa como una cadena de caracteres (opción –c).
• Se pueda ajustar la cantidad de warnings emitidos por el intérprete (opción –W).
• Se pueda utilizar la optimización del código eliminando los asserts y los docstrings (opción –O y –OO).
Si, por ejemplo, se quisiera crear ficheros compilados (utilizando el módulo compileall, https://docs.python.org/3/library/compileall.html) y optimizados, se podría ejecutar el siguiente comando: