Domanda

Io sostengo un'applicazione multi-piattaforma, basata su PyQt che gira su Linux Mac e Windows.

Le finestre e le versioni per Mac vengono distribuite mediante py2exe e py2app, che produce abbastanza grandi fasci (~ 40 MB).

Vorrei aggiungere una funzionalità "aggiornamento automatico", sulla base di patch per limitare le dimensioni download:

  • verificare la presenza di nuove versioni su un server HTTP
  • scaricare le patch necessarie per aggiornare l'ultima versione
  • applicare l'elenco di patch e riavviare l'applicazione

ho alcune domande:

  • quello che è il modo migliore per aggiornare un'applicazione Windows in quanto i file aperti sono bloccati e non possono essere sovrascritti?
  • come faccio a preparare e applicare le patch? magari utilizzando bsdiff / pspatch ?

[update]

Ho fatto una semplice classe per rendere patch con bsdiff , che è molto efficiente come pubblicizzato sul loro sito: un diff su due versioni py2exe della mia app (~ 75 MB non compressi) produce un cerotto kB 44! abbastanza per me piccolo, mi atterrò a questo formato.

Il codice è disponibile nel pacchetto 'update' di pyflu , una piccola libreria di Python codice.

È stato utile?

Soluzione

Non credo py2exe supporta gli aggiornamenti patch. Tuttavia, se non si impacchettare l'intero pacchetto in un singolo file EXE ( py2exe sito esempio - fondo alla pagina), si può ottenere via con gli aggiornamenti più piccoli, semplicemente sostituendo alcuni file , come il file EXE, per esempio. Questo può ridurre la dimensione degli aggiornamenti in modo significativo.

È possibile scrivere un separato aggiornamento app , che può essere scaricato / eseguito da dentro l'applicazione. Questa applicazione può essere diverso per ogni aggiornamento, come i file che devono essere aggiornati possono cambiare.

Una volta che l'applicazione lancia il programma di aggiornamento, avrà bisogno di chiudersi in modo che i file possono essere sovrascritti. Una volta che il programma di aggiornamento è completo, si può avere riaprire l'applicazione prima di chiudere in sé.

Altri suggerimenti

Non so sulle patch, ma su OS X "standard" per questo con le applicazioni di cacao è Sparkle . Fondamentalmente significa "Appcasting". Si scarica l'applicazione completa di volta in volta. Potrebbe valere la pena guardare per l'ispirazione.

immagino su OS X probabilmente si può solo scaricare la parte reale del proprio bundle app che contiene il codice specifico (non le librerie ecc che vengono confezionati in) e che sarebbe abbastanza piccolo e facile da sostituire nel bundle.

In Windows, si sarebbe probabilmente in grado di fare un trucco simile da non impacchettare la vostra applicazione in un unico exe -. Permettendo così di modificare quello file che è effettivamente cambiato

Mi piacerebbe immaginare il codice Python attuale sarebbe molto meno di 40Mb, in modo che è probabilmente la strada da percorrere.

Per quanto riguarda la sostituzione della applicazione in esecuzione, ben prima è necessario trovare la sua posizione, così si potrebbe usare sys.executable per ottenere un punto di partenza, allora si potrebbe probabilmente fork di un processo figlio, uccidere il processo padre e avere il bambino facendo la sostituzione attuale?

Al momento sto giocando intorno con un piccolo wxPython app e chiedendo circa esattamente questo problema. Mi piacerebbe sentire su ciò che si arriva con.

Anche quanto grande è che si app quando compressa? Se si comprime bene allora forse si può ancora permettersi di mandare il tutto.

Si tratta di 4 anni ormai, ma per quanto riguarda Esky ?

Dal py2exe mette tutti i moduli compilati della vostra applicazione in un file ZIP, si potrebbe tentare di aggiornare questo file con la creazione di uno script che aggiorna da un dato insieme di file. Quindi sostituire i file rimanenti che sono stati modificati (che dovrebbe essere pochi, se ce ne sono).

Un vecchio post, ma ho pensato di citare pyupdater con pyinstaller.

Supporta Amazon e SCP.

In futuro, secondo recenti messaggi GitHub, che prevede di sostenere alternative gratuite.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top