Entonces quieres escribir una aplicación de escritorio en Python
Fuente | Blog
Agradezco a Thomas Kluyver, porque este artículo está escrito por él y está tan bien escrito que lo estoy publicando tal como está 🙂 <3
Esta es una descripción general de las mejores herramientas y los mejores recursos para crear aplicaciones de escritorio en Python.
Lo primero es lo primero. Puede crear excelentes aplicaciones de escritorio en Python, y algunas son ampliamente utilizadas (como Dropbox). Pero tendrá que encontrar su propio camino mucho más de lo que usaría los SDK de Microsoft o Apple. Lo bueno es que, con un poco de trabajo preliminar para empaquetarlo adecuadamente, es bastante factible escribir una aplicación Python que funcione en todas las plataformas principales.
Kits de herramientas de GUI
Lo primero que deberá elegir es un kit de herramientas GUI.
- Para las IU de escritorio tradicionales, Qt es un claro ganador. Es poderoso, parece nativo en todas las plataformas principales y probablemente tenga la comunidad más grande. Hay dos enlaces de Python diferentes: PyQt es más antiguo y más maduro, pero solo es gratuito si su aplicación es de código abierto (licencia), mientras que PySide es más nueva y tiene una licencia más permisiva (LGPL). Me refiero mucho a los documentos principales de Qt, los ejemplos de C ++ se traducen principalmente a Python bastante bien, pero tanto los documentos de PyQt como los de PySide contienen información útil. Qt Designer es una interfaz de arrastrar y soltar para diseñar su interfaz de usuario; Puede compilar sus archivos .ui en módulos de Python con la herramienta de línea de comandos pyuic.
Qt Designer en acción
- Para interfaces atractivas, estilo tableta, Kivy es la elección correcta. Es un sistema bastante joven pero prometedor. Si desea llevar su aplicación a tabletas y teléfonos inteligentes, entonces Kivy es la única opción que conozco. Más información
- Cuando quieres una GUI básica y no te importa la estética, Tkinter es una opción simple. Está instalado como parte de Python. La documentación de tkinter de Python es bastante mínima, pero está vinculada a muchos otros recursos. Este sitio es mi favorito: no se ha actualizado en años, pero tampoco lo tiene Tkinter (excepto que en Python 3, importa tkinter en lugar de importar Tkinter).
- Pygame es popular para construir juegos 2D simples. También hay marcos para gráficos 3D (pyglet, Panda3d), pero no sé mucho sobre ellos.
- Una opción cada vez más popular es escribir su aplicación como un servidor web local y construir la interfaz de usuario en HTML y Javascript. Esto le permite utilizar el gran ecosistema de marcos web y bibliotecas de Python, pero es más difícil de integrar con las convenciones de escritorio para cosas como abrir archivos y administrar ventanas. CEF Python le permite crear una ventana para su aplicación, basada en Google Chrome, pero no lo he intentado.
Un par de alternativas que no recomendaría a menos que tenga una razón para preferirlas: GTK es popular en Linux, pero se ve feo en otras plataformas. Los enlaces pygtk más antiguos tienen excelente documentación; el nuevo sistema PyGObject, que admite versiones recientes de GTK y Python, no lo hace (aunque está mejorando). wx parece tener una buena comunidad, pero el desarrollo es lento, y los nuevos proyectos que podrían haberlo utilizado ahora parecen elegir Qt.
Empaque y Distribución
Esta es probablemente la parte más dura de hacer una aplicación en Python. Puede distribuir fácilmente herramientas para desarrolladores como paquetes de Python que se instalarán utilizando pip, pero los usuarios finales generalmente no tienen Python y pip ya configurados. Los paquetes de Python tampoco pueden depender de algo como Qt. Hay varias formas de empaquetar su aplicación y sus dependencias:
- Pynsist, mi propio proyecto, crea un instalador de Windows que instala una versión de Python que usted especifique y luego instala su aplicación. A diferencia de las otras herramientas enumeradas aquí, no intenta ‘congelar’ su aplicación en un exe, sino que crea accesos directos que lanzan archivos .py. Esto evita ciertos tipos de errores.
- cx_Freeze es una herramienta de congelación: hace que su aplicación sea un ejecutable. Funciona en Windows, Mac y Linux, pero solo produce el ejecutable para la plataforma en la que lo ejecuta (por ejemplo, no puede hacer un exe de Windows en Linux). Puede hacer paquetes simples (.msi para Windows, .dmg para Mac, .rpm para Linux), o puede alimentar su salida a NSIS o Inno Setup para tener más control sobre la construcción de un instalador de Windows.
- PyInstaller es similar a cx_Freeze. Todavía no es compatible con Python 3 (actualización: ahora lo es, desde octubre de 2015), pero tiene la capacidad de producir un ejecutable de ‘archivo único’.
- py2app es una herramienta de congelación específica para construir paquetes Mac .app.
- py2exe es una herramienta de congelación solo para Windows. El desarrollo se detuvo por mucho tiempo, pero al momento de escribir hay una actividad reciente en él.
Empaquetado de Linux
Aunque algunas de las herramientas de congelación pueden crear binarios de Linux, la forma preferida de distribuir software es hacer un paquete que contenga solo su aplicación, que depende de Python y de las bibliotecas que utiliza su aplicación. Por lo tanto, su paquete no contiene todo lo que necesita, pero le dice al administrador de paquetes qué otras piezas necesita instalar.
Desafortunadamente, los procedimientos para prepararlos son bastante complejos, y las distribuciones de Linux aún no tienen un formato de paquete común. Los principales son paquetes deb, utilizados por Debian, Ubuntu y Mint, y paquetes rpm, utilizados por Fedora y Red Hat. No conozco una guía buena y simple para empaquetar aplicaciones de Python para cualquiera: si encuentra una o escribe una, hágamelo saber.
Puede hacer que los usuarios descarguen e instalen su paquete, pero si desea que reciba actualizaciones a través del administrador de paquetes, deberá alojarlo en un repositorio. El envío de su paquete a los repositorios principales de la distribución facilita la instalación de los usuarios, pero tiene que cumplir con los estándares de calidad de la distribución, y generalmente no puede enviar nuevas versiones de funciones a las personas, excepto cuando actualizan toda la distribución. Algunas distribuciones ofrecen alojamiento para repositorios personales: los PPA de Ubuntu o los repositorios de Fedorapeople de Fedora. También puede configurar un repositorio en su propio servidor.
Si no quiere pensar en todo eso, simplemente haga un tarball de su aplicación y explique a los usuarios de Linux al lado de la descarga lo que requiere.
Diverso
- Subprocesos : si su aplicación hace algo que demore más de una décima de segundo, debe hacerlo en un subproceso en segundo plano, para que su IU no se bloquee. Asegúrese de interactuar solo con elementos de la GUI del hilo principal, o puede obtener valores predeterminados. El GIL de Python no es un gran problema aquí: el hilo de la interfaz de usuario no debería necesitar mucho tiempo de procesamiento de Python.
- Actualizaciones : Esky es un marco para actualizar aplicaciones congeladas de Python. No lo he probado, pero parece interesante.