Pregunta

Mantengo una aplicación multiplataforma, basado en PyQt que se ejecuta en Linux Mac y Windows.

Las ventanas y las versiones de Mac son distribuidas utilizando py2exe y py2app, que produce bastante grandes haces (~ 40 MB).

Me gustaría añadir una funcionalidad de "actualización automática", sobre la base de parches para limitar el tamaño de las descargas:

  • comprobar si hay nuevas versiones en un servidor HTTP
  • descargar los parches necesarios para actualizar a la última versión
  • aplicar la lista de parches y reinicie la aplicación

Tengo algunas preguntas:

  • ¿qué es la manera preferida para actualizar una aplicación de Windows ya que los archivos abiertos están bloqueadas y no se pueden sobrescribir?
  • ¿Cómo me preparo y aplicar los parches? tal vez usando bsdiff / pspatch ?

[Actualización]

Hice una clase simple de hacer parches con bsdiff , que es muy eficiente como anuncian en su sitio: un diff en dos versiones py2exe de mi aplicación (~ 75 MB sin comprimir) produce un parche 44 kB! suficiente para mí pequeña, que se adhieren a este formato.

El código está disponible en el paquete de 'actualización' del pyflu , una pequeña biblioteca de Python código.

¿Fue útil?

Solución

No creo py2exe soporta actualizaciones parcheados. Sin embargo, si no agrupar todo el paquete en un único archivo EXE ( py2exe página web ejemplo - parte inferior de la página), usted puede conseguir lejos con las actualizaciones más pequeños con sólo reemplazar ciertos archivos , al igual que el archivo EXE, por ejemplo. Esto puede reducir el tamaño de las actualizaciones de manera significativa.

Puede escribir un aplicación separada de actualización , que se puede descargar / ejecutó desde el interior de su aplicación. Esta aplicación puede ser diferente para cada actualización, como los archivos que necesitan ser actualizados pueden cambiar.

Una vez que la aplicación se inicia el programa de actualización, tendrá que cerrarse para que los archivos se pueden sobrescribir. Una vez que el programa de actualización se ha completado, puede hacer que se vuelva a abrir la aplicación antes de cerrarse.

Otros consejos

No sé sobre los parches, pero en OS X el "estándar" para esto con aplicaciones de cacao es de la chispa . Básicamente lo hace "appcasting". Es capaz de descargar la aplicación completa cada vez. Podría valer la pena mirarlo en busca de inspiración.

Me imagino en OS X probablemente puede descargar la parte real de su paquete de aplicaciones que contiene su código específico (no las librerias, etc que quedan empaquetados en) y eso sería bastante pequeño y fácil de reemplazar en el paquete.

En Windows, probablemente sería capaz de hacer un truco similar al no empaquetar su aplicación en un solo exe -. Permitiendo así que se cambia el archivo que ha cambiado realmente

Me imagino su código Python real sería mucho menos de 40Mb, por lo que es probablemente el camino a seguir.

En cuanto a la sustitución de la aplicación en ejecución, así Lo primero que necesita para encontrar su ubicación, por lo que podría utilizar sys.executable para conseguir que un punto de partida, entonces probablemente podría desembolsar un proceso hijo, matar el proceso padre y tener el niño que hace la sustitución real?

Actualmente estoy jugando con una pequeña aplicación wxPython y preguntándose sobre exactamente este problema. Me gustaría saber acerca de lo que ocurra.

Además de lo grande que es la aplicación cuando se comprime? Si se comprime bien entonces tal vez usted todavía puede permitirse enviar a todo el asunto.

Esto es de 4 años de edad ahora, pero ¿qué pasa Esky ?

Desde py2exe pone todos los módulos compilados de su aplicación en un archivo ZIP, usted podría tratar de actualizar este archivo mediante la creación de un script que actualiza desde un determinado conjunto de archivos. A continuación, reemplace los archivos restantes que han cambiado (que debe ser pocos, si los hay).

Un antiguo puesto, pero pensé que me gustaría mencionar pyupdater con PyInstaller.

Es compatible con Amazon y SCP.

En el futuro, de acuerdo con los últimos mensajes de GitHub, planean apoyar alternativas libres.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top