2009-02-15 9 views
16

Estoy pensando en usar Python como lenguaje de scripting embebido en un proyecto de pasatiempo escrito en C++ . No me gustaría depender de la distribución de Python instalada por separado. La documentación de Python parece ser bastante clara sobre el uso general, pero no pude encontrar una respuesta clara a esto.Implementación de aplicaciones con Python u otro lenguaje de script incrustado

¿Es factible implementar un intérprete de Python + biblioteca estándar con mi aplicación? ¿Algún otro lenguaje como Lua, Javascript (Spidermonkey), Ruby, etc. sería mejor para este uso?

Aquí están los criterios que estoy un peso de los diferentes idiomas en contra:

  • no pocas dependencias/de los paquetes instalados externamente
  • biblioteca estándar con un buen conjunto de características
  • lenguaje agradable :)
  • Doesn no resultará en un enorme paquete de instalación

editar:

Supongo que la pregunta debería ser: ¿Cómo implemento mi propia biblioteca python + biblioteca estándar con el instalador de mi programa, para que no importe si la plataforma ya tiene python instalado o no?

edición2:

Una aclaración más. No necesito información sobre detalles de vincular el código de C y Python.

Respuesta

16

Enlace su aplicación a la biblioteca de python (pythonXX.lib en Windows) y agregue lo siguiente a su función main().

Py_NoSiteFlag = 1; // Disable importing site.py 
Py_Initialize(); // Create a python interpreter 

puso a los bits de la biblioteca estándar de Python que necesita en un archivo zip (llamado pythonXX.zip) y colocan esto y pythonXX.dll junto al ejecutable que distribuya. Eche un vistazo a PyZipFile en el módulo zipfile.

+2

También se debe tener en cuenta que colocar los archivos python en un archivo zip también conlleva implicaciones de rendimiento. Obtiene un tamaño de instalación más pequeño, pero aumenta el tiempo de inicio. Esto se debe a que tiene que descomprimir y compilar los archivos cada vez que se inicia (no guardará un archivo pyc). –

+0

¿Es posible simplemente distribuir archivos .pyc? ¿Qué pasará si tenemos archivos py (no comprimidos) en una ubicación a la que el usuario solo tiene acceso de lectura? –

+3

En realidad, si crea el archivo usando zipfile.PyZipFile, solo archivará archivos .pyc. También puedes crear el archivo a mano. El tiempo de inicio se reduce porque el encabezado zip contiene una lista de todos los módulos presentes y su desplazamiento binario. –

8

El proceso de inserción está completamente documentado: Embedding Python in Another Application. Los documentos sugieren algunos niveles en los que se realiza la incrustación, elija lo que mejor se adapte a sus necesidades.

Puede encontrar una demostración simple de incrustación Python en el directorio Demo/embed/of the source distribution.

The demo is here, debería poder construir desde la distribución.

  • nivel muy alto Incorporación
  • Más allá de muy alto nivel incrustación: Una visión general
  • puro Incorporación
  • Extender Embedded Python
  • Empotrado de Python en C++

De la biblioteca estándar puede seleccionar la comp onents que no llevan demasiadas dependencias.

+0

Se agregó un enlace a la fuente de demostración. – gimel

+0

Creo que la pregunta no estaba clara. Lo edité un poco. Tal vez es más exacto ahora. –

0

Si está buscando una forma de implementar una aplicación de Python, puede usar Py2Exe. Eso le permitiría a su aplicación todas las dependencias que necesita sin preocuparse de lo que está o no instalado en la máquina de los usuarios.

[Editar] Si py2exe es un no-go para aplicaciones embebidas, ¿podría simplemente obtener su instalador para comprobar si los archivos relevent y descargar/instalar cualquier cosa que falta? [/ Editar]

[Edit2] podría Elmer se lo que estás buscando? [/ Edit2]

+0

¿Funciona eso con la aplicación C++ con Python incrustado? –

+0

No estoy seguro (nunca lo he probado). Py2exe solo convierte una aplicación de Python, incluidas las dependencias que necesita, en un único ejecutable. –

5

Para extender la respuesta por gimel, no hay nada que le impida enviar python.dll, usándolo, y establecer una PYTHONPATH correcta para usar su propia instalación de la biblioteca estándar de python. Son solo bibliotecas y archivos, y su proceso de instalación solo puede tratarlos como tales.

+0

Gracias por la respuesta en el tema. :) –

Cuestiones relacionadas