Frage

Ich behaupte, eine Cross-Plattform-Anwendung, basierend auf PyQt, die auf Linux Mac läuft und Fenster.

Die Windows- und Mac-Versionen verteilt mit py2exe und py2app, die ziemlich großen Bündeln produziert (~ 40 MB).

Ich mag eine „Auto-Update“ Funktionalität hinzuzufügen, basierend auf Patches Download-Größe zu begrenzen:

  • prüfen, ob neue Versionen auf einem HTTP-Server
  • laden Sie die Patches auf die letzte Version zu aktualisieren benötigt
  • gelten die Patches Liste und die Anwendung neu starten

Ich habe einige Fragen:

  • was ist der bevorzugte Weg, um eine Windows-Anwendung zu aktualisieren, da offene Dateien gesperrt sind und können nicht überschrieben werden?
  • Wie bereite ich und die Patches anwenden? vielleicht mit bsdiff / pspatch ?

[Update]

habe ich eine einfache Klasse zu machen Patches mit bsdiff , die wie in der Werbung sehr effizient auf ihre Website: ein diff auf zwei py2exe Versionen meiner app (~ 75 MB unkomprimiert) einen 44 kB-Patch! Klein genug für mich, ich zu diesem Format bleiben wird.

Der Code ist in der 'update' Paket von pyflu , eine kleine Bibliothek von Python verfügbar Code.

War es hilfreich?

Lösung

Ich glaube nicht, dass py2exe gepatchten Updates unterstützt. Wenn Sie jedoch keine bündeln nicht das gesamte Paket in einer einzigen EXE ( py2exe Website Beispiel - Ende der Seite), Sie können mit kleinerem Updates weg von nur ersetzen bestimmten Dateien , wie die EXE-Datei, zum Beispiel. Dies kann die Größe Ihres Updates erheblich reduzieren.

Sie können einen separaten Aktualisierungs App schreiben , die heruntergeladen werden kann / lief aus dem Inneren Ihrer Anwendung. Diese App kann für jedes Update unterschiedlich sein, da die Dateien, die aktualisiert werden müssen geändert werden.

Sobald die Anwendung den Updater startet, wird es brauchen, sich zu schließen, so können die Dateien überschrieben werden. Nachdem der Updater abgeschlossen ist, können Sie es um die Anwendung wieder öffnen, bevor sich zu schließen.

Andere Tipps

Ich weiß nicht, über Patches, sondern auf OS X der "Standard" für diese mit Kakao apps ist Sparkle . Im Grunde ist es nicht „appcasting“. Es lädt die volle App jedes Mal. Es könnte sich inspirieren und es einen Blick wert sein.

ich auf O X vorstellen, können Sie wahrscheinlich nur den tatsächlichen Teil Ihrer App Bundle herunterladen, die Ihren spezifischen Code enthält (nicht die Bibliotheken usw., die verpackt in get) und das wäre ziemlich klein und einfach in dem Bündel zu ersetzen.

Unter Windows, dann würden Sie wahrscheinlich in der Lage sein, einen ähnlichen Trick zu tun, indem sie Ihre App nicht in eine exe Bündelung -. So lassen Sie die eine Datei ändern, die tatsächlich geändert hat

Ich würde Ihren tatsächlichen Python-Code vorstellen, wäre viel weniger als 40MB, so das ist wahrscheinlich der Weg zu gehen.

Wie für die laufende App zu ersetzen, auch müssen Sie zuerst die Lage finden, so dass Sie sys.executable verwenden können Sie einen Ausgangspunkt zu bekommen, dann könnte man wahrscheinlich ein Kind Prozess Gabel den übergeordneten Prozess töten und haben das Kind zu tun der tatsächliche Ersatz?

Ich spiele zur Zeit mit einer kleinen WxPython App um und frage mich, über genau dieses Problem. Ich würde gerne über hören, was Sie kommen mit.

Auch wie groß ist Sie app, wenn sie komprimiert? Wenn es gut komprimiert dann können Sie vielleicht noch leisten, die ganze Sache zu senden.

Dies ist 4 Jahre alt jetzt, aber was ist Esky ?

Da py2exe alle der kompilierten Module Ihrer Anwendung in eine ZIP-Datei legt, könnten Sie versuchen, diese Datei zu aktualisieren, indem Sie ein Skript erstellen, die es von einem bestimmten Satz von Dateien aktualisiert. Dann ersetzen Sie die verbleibenden Dateien, die geändert wurden (die nur wenige sein sollte, falls vorhanden).

Eine alte Post, aber ich dachte, ich würde erwähnen pyupdater mit pyinstaller.

Es unterstützt Amazon und scp.

In Zukunft nach jüngsten Github Beiträge planen sie Alternativen zu unterstützen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top