C ++ con incrustación de Python: falla si Python no está instalado

Estoy desarrollando en Windows, y he buscado por todas partes sin encontrar a nadie hablando de este tipo de cosas.

Hice una aplicación C ++ en mi escritorio que incrustaba Python 3.1 utilizando MSVC. Vinculé python31.lib e incluí python31.dll en la carpeta de ejecución de la aplicación junto con el ejecutable. Funciona muy bien Mi extensión y código de inserción definitivamente funcionan y no hay fallas.

Envié la carpeta de ejecución a mi amigo que no tiene Python instalado, y la aplicación se bloquea para él durante la fase de configuración de scripting.

Hace unas horas, probé la aplicación en mi computadora portátil que tiene Python2.6 instalado. Tuve el mismo comportamiento de bloqueo que mi amigo y, a través de la depuración, descubrí que la llamada Py_Initialize () fallaba.

Instalé Python 3.1 en mi computadora portátil sin cambiar el código de la aplicación. Lo corrí y funciona perfectamente. Desinstalé Python 3.1 y la aplicación vuelve a fallar. Puse el código en mi aplicación para enlazar dinámicamente desde el archivo python31.dll local, para asegurarme de que lo estaba usando, pero todavía tengo la falla.

No sé si el intérprete necesita más que la DLL para iniciar o qué. No he podido encontrar ningún recurso sobre esto. Parece que la documentación de Python y otras guías nunca abordan cómo distribuir sus aplicaciones C / C ++ que utilizan la incrustación de Python sin que los usuarios instalen Python de forma local. Sé que es más un problema en Windows que en Unix, pero he visto varias aplicaciones de Windows C / C ++ que incorporan Python localmente y no estoy seguro de cómo lo hacen.

¿Qué más necesito además de la DLL? ¿Por qué funciona cuando instalo Python y luego dejo de funcionar cuando lo desinstalo? Parece que debería ser tan trivial; tal vez por eso nadie realmente habla de ello. Sin embargo, realmente no puedo explicar cómo lidiar con este problema de choque.

Muchas gracias por adelantado.

Respuestas a la pregunta(4)

Su respuesta a la pregunta