Quiero escribir una aplicación en C++ con Qt, pero construir primero un prototipo usando Python y luego reemplazar gradualmente el código de Python con C++. ¿Es este el enfoque correcto?
Eso depende de sus objetivos. Habiendo hecho ambas cosas, te recomendaría que te quedes con Python siempre que sea posible y razonable. Aunque requiere un poco de disciplina, es muy posible escribir aplicaciones extremadamente grandes en Python. Pero, a medida que encuentre hotspots y cosas que pueden manejarse mejor en C++, ciertamente puede transferir partes relevantes a C++.
¿Existe alguna documentación exhaustiva sobre este proceso o debo aprender cada componente y, en caso afirmativo, cuáles?
Aquí es lo que recomiendo para las diferentes piezas:
EDITOR/IDE: utilizar cualquier editor/IDE que se sienta cómodo, pero yo recomiendo que soporta refactorización. Si te sientes cómodo con Eclipse, úsalo. Si quieres ir principalmente a la ruta C++ y no estás muy familiarizado con ningún editor, es posible que estés mejor con QtCreator. Eric es un IDE de Python extremadamente bueno con soporte para refactorización, a menos que vaya a hacer mucho C++, échele un vistazo. Aún mejor, su código fuente es un ejemplo de buen uso y prácticas de PyQt.
PROCESO:
El breve resumen:
- escribir una aplicación en Python usando PyQt
- Cuando identificado como puntos de acceso, convertir las clases de Python desconectados a C++
- Crear enlaces para los clases que usan SIP
- Importe el libr recién definido aries en Python en lugar de sus homólogos Python
- Disfrute de la mejora en la velocidad
Detalles generales:
escribir la aplicación en Python usando PyQt. Tenga cuidado de mantener un buen separation of concerns para que cuando necesite portar piezas a C++ estén separadas de sus dependencias. Cuando finalmente necesite portar algo a C++, escríbalo en C++/Qt y luego cree enlaces para él usando SIP. SIP tiene un good reference manual en el proceso, y tiene todo PyQt como ejemplo.
DESPLIEGUE:
C++ - Para muchas aplicaciones de las dependencias son lo suficientemente simple que no es demasiado difícil crear un instalador usando una herramienta como NullSoft's Installer o InnoSetup.
Python/PyQt - Las aplicaciones PyQt son un poco más difíciles de instalar debido a la dependencia de Python y su dependencia de la presencia de las bibliotecas Qt. Una persona documentó sus esfuerzos en this post at ARSTechnica. py2exe funciona bastante bien en Windows y debería funcionar bien. IME, freeze.py, que viene con la fuente Python, a veces tiene problemas para determinar qué librerías compartidas son realmente necesarias y algunas veces terminará creando un binario cuyas dependencias no están presentes. Py2app can be made to work on Mac OS X.
Pero peor, sin embargo, es la licencia de PyQt/Qt. Si está desarrollando una aplicación comercial, debe tener una licencia comercial PyQt (y Qt) y asegúrese de evitar que los usuarios modifiquen fácilmente la fuente o escriban código contra PyQt/Qt API because of licensing restrictions. Por eso, el autor de PyQt creó una herramienta llamada VendorId (aunque tiene una licencia de Python). Dentro de VendorId hay una herramienta llamada SIB que se puede usar para crear un ejecutable que depende solo del intérprete de Python. Pero, si vas a llegar tan lejos, es posible que desees instalar un Python personalizado junto con tu aplicación.
RENUNCIA: No he utilizado PySide en absoluto, así que no estoy seguro de cómo se compara con PyQt. Además, tenga en cuenta la siguiente advertencia en su sitio web:
PySide es un trabajo en progreso y todavía no es adecuado para el desarrollo de aplicaciones que requieren estabilidad en el nivel de producción.
Pero, en una buena nota, pretenden, al menos para la versión inicial, "mantener compatibilidad API con PyQt". Entonces, aparte de los enlaces de C++, podrías cambiar fácilmente entre los dos más tarde.
¡Buena respuesta! Puede considerar una sección en py2exe/freeze.py en respuesta a la edición del OP, aunque no hicieron la pregunta explícitamente. – tgray
@tgray - gracias por el aviso de las ediciones. He agregado una sección de Implementación. –
quizás actualice la parte 'Pyside no es adecuada para nivel de producción' ya que ha sido por un tiempo. – vikki