micropython esp32 python embedded

esp32 - Optimizando el tamaño del intérprete Python incrustado



micropython esp32 (3)

Me encontré con esta pregunta a finales de 2018. En este momento, la minúscula python más popular, y la diseñada específicamente para plataformas restringidas y dispositivos integrados, es MicroPython que es popular para cosas como los microcontroladores.

Pasé las últimas 3 horas tratando de averiguar si es posible deshabilitar o crear Python sin el modo interactivo o cómo puedo reducir el tamaño del ejecutable de Python para Linux.

Como puedes imaginar, es para un dispositivo integrado y después de la compilación cruzada, Python tiene aproximadamente 1 MB de tamaño y eso es demasiado para mí.

Ahora las preguntas:

¿Hay posibilidades de reducir el ejecutable de Python? Tal vez para deshabilitar el modo interactivo (iniciando los programas de Python en la línea de comandos).

Busqué las opciones de configuración y probé algunas de ellas, pero no produce ningún cambio para mi ejecutable.

Lo compilo con opciones optimizadas de gcc y ya está despojado.


Puede haber formas en las que pueda reducirlo un poco más solo con la configuración, pero no mucho más.

Además, el código real del modo interactivo es bastante trivial, así que dudo que ahorres mucho allí.

Estoy seguro de que hay funciones más importantes que no estás utilizando que podrías eliminar del intérprete para reducir el tamaño. Por ejemplo, es probable que pueda tirar una gran parte del analizador y el compilador y simplemente tratar con nada más que bytecode. El problema es que la única forma de hacerlo es hackear la fuente del intérprete. (Y no es el código más hermoso del mundo, por lo que tendrá que dedicar una buena cantidad de tiempo para aprender a manejar). Y tendrá que saber qué funciones puede eliminar realmente.

La única otra alternativa real sería escribir un intérprete más pequeño para un lenguaje similar a Python, por ejemplo, recogiendo el proyecto Tinypy. Pero a partir de sus comentarios, no suena como si "como Python" fuera suficiente para usted a menos que sea muy cerca.

Bueno, supongo que hay una alternativa más: hackear una implementación de Python diferente y mejor que CPython. El problema es que Jython y IronPython no son código nativo (aunque quizás puedas usar un compilador nativo JVM->, o posiblemente meter suficiente Jython en una JVM de J2ME?), Y PyPy realmente no está listo para el horario estelar. sistemas (¿Puedes esperar un par de años?) Entonces, probablemente estés atrapado con CPython.


Si realmente desea reducir Python, puede echar un vistazo a esos proyectos:

http://code.google.com/p/python-on-a-chip/

como se dice en el sitio:

Python-on-a-Chip (p14p) es un proyecto para desarrollar una máquina virtual Python reducida (con nombre en código PyMite) que ejecuta un subconjunto significativo del lenguaje Python en microcontroladores sin un sistema operativo. Las otras partes de p14p son los controladores de dispositivos, las bibliotecas de alto nivel y otras herramientas. Por favor únase al grupo de google python-on-a-chip para discutir este proyecto.

Esto puede ser un poco más bajo de lo esperado, pero en realidad está reducido:

Características de la máquina virtual de PyMite:

  • Requiere aproximadamente 55 KB de memoria del programa
  • Inicializa en 4KB RAM; imprimir "hola mundo" necesita 5KB; 8KB es la RAM mínima recomendada.
  • Admite enteros, flotadores, tuplas, listas, dados, funciones, módulos, clases, generadores, decoradores y cierres.
  • Admite 25 de 29 palabras clave y 89 de 112 códigos de bytes de Python 2.6

Podrías obtener ideas interesantes de este proyecto.

Tenga en cuenta que solo obtiene la máquina virtual, es decir. puedes ejecutar archivos pyc, no py. (Sin embargo, los archivos pyc son multiplataforma. Y mucho más pequeños que los archivos py)

De hecho, si realmente apuntas a Python más pequeño, necesitas deshabilitar partes de la biblioteca, pero quizás también el compilador en sí.

Este sitio puede tener punteros interesantes también: http://www.awaretek.com/pymo.html