2012-09-27 970 views
15

Pasé las últimas 3 horas tratando de averiguar si es posible desactivar o construir Python sin el modo interactivo o cómo puedo obtener el tamaño del ejecutable de python más pequeño para Linux.Optimizar el tamaño del intérprete de Python incorporado

Como puedes adivinar 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:

¿Existen posibilidades para reducir el tamaño del ejecutable de Python? Tal vez para deshabilitar el modo interactivo (comenzando los programas de Python en la línea de comandos).

Busqué las opciones de configuración e intenté algunas de ellas pero no produjo ningún cambio para mi ejecutable.

Compilo con opciones optimizadas de gcc y ya está desprotegido.

+0

Ver este [SO pregunta] (http://stackoverflow.com/questions/240996/anyone-using-python-for-embedded-projects?rq=1) para ejecutar en 16 MB de RAM – Mark

+0

lo he leído, pero el problema es que tinypy no se actualizó desde 2008! ¡Y para nada no es posible usar todas las bibliotecas o no es fácil de usar! Demasiado trabajo para cada biblioteca. Objetivo imposible que Python tuviera un tamaño de menos de 500kb – Benny

+1

Hace muchos años estaba en una empresa que usaba hardware incrustado y, después de probar muchos intérpretes diferentes, decidimos utilizar un Forth incrustado. Los ejecutables eran más pequeños que el binario nativo, no bromeo. –

Respuesta

2

Puede haber formas en que puede reducir un poco más la configuración, pero no mucho más.

Además, el código de modo interactivo real es bastante trivial, así que dudo que va a ahorrar mucho allí.

Estoy seguro de que existen características más sustanciales que no está utilizando que podría hackear del intérprete para bajar el tamaño. Por ejemplo, es probable que puedas descartar una gran parte del analizador y el compilador y que simplemente se ocupe de bytecode. El problema es que la única forma de hacerlo es piratear la fuente del intérprete. (Y no es el código más hermoso del mundo, por lo que tendrá que dedicarle una buena cantidad de tiempo para aprender a moverse). Y deberá saber qué funciones puede piratear.

La única otra alternativa real sería escribir un intérprete más pequeño para un lenguaje Python, por ejemplo, seleccionando el proyecto tinypy. Pero de sus comentarios, no parece que "Python-like" sea suficiente para usted a menos que sea muy cercano.

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

+2

+1 con las instrucciones anteriores. Tener Python en forma en 1Mb ya es todo un logro. Si el espacio es tan ajustado en el dispositivo integrado, consideraría alternativas más pequeñas, como lua (afirmado que caben en menos de 500kb) –

+0

¡Gracias por la ayuda rápida y, por supuesto, por la corrección de mi inglés! Creo que dejamos a Pyhton en este tamaño ahora y tal vez lo construyamos en nuestro futuro hardware cuando tengamos más espacio en flash. THX a todos – Benny

+1

Es muy probable que PyPy nunca esté listo para usar en tales entornos restringidos. La abstracción agregada definitivamente aumenta el tamaño y el compilador JIT incrustado en el ejecutable no ayuda. – fijal

5

Si verdaderamente desea reducir pitón, se puede echar un vistazo a los proyectos:

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

como se dijo en el sitio:

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

Esto puede ser un poco menor nivel de lo esperado, pero en realidad se shrinked:

Características del PyMite VM:

  • Requiere menos memoria del programa 55 KB
  • Inicializa en 4 KB RAM; imprimir "hola mundo" necesita 5 KB; 8 KB es la RAM mínima recomendada.
  • Soporta números enteros, flotadores, tuplas, listas, predice, funciones, módulos, clases, grupos electrógenos, decoradores y cierres
  • soportes 25 de 29 palabras clave y 89 de 112 códigos de bytes desde Python 2,6

Usted podría conseguir ideas interesantes de este proyecto.

Ten en cuenta que solo obtienes 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 selecciona Python más pequeño, debe deshabilitar partes de la biblioteca, pero quizás también el compilador.

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

+0

+1. Muy interesante. Parece un lenguaje de Python de sala limpia en lugar de un truco de CPython (marcaje de GC, apilado, sin extensiones C, etc.). Creo que sugerí que sería demasiado trabajo para el proyecto del OP hacer desde cero, pero construir sobre PyMite podría ser un proyecto perfectamente razonable. Probablemente dependa de la cantidad de funcionalidad stdlib que necesite el OP. – abarnert

Cuestiones relacionadas