Frage

Ich habe es geschafft, meine PYQT4 -App als "eigenständige" Anwendung unter Windows zu verpacken.

Diese Anwendung kann sich jedoch selbst aktualisieren, was durch Ersetzen des tatsächlichen Codes von mir (.py -Dateien) durch neue Versionen ersetzt wird, die über das Internet heruntergeladen wurden.

Wie kann ich Pyinstaller erkennen, dass er seinen Job macht (zusammenstellen, die DLLs zusammenstellen, den Launcher mit dem glänzenden Symbol usw. generieren), aber lassen Sie die .py -Dateien unberührt?

Ich brauche diese Dateien direkt auf der Festplatte, damit das Auto-Update funktioniert.

War es hilfreich?

Lösung

Sie können die Spezifikationsdatei so ändern, dass sie keine Dateien mit Namen aufnehmen (wenn Listen erstellen), und stellen Sie dann sicher, dass diese Dateien enthalten sind - ich müsste überprüfen, ob es eine Option gibt, nicht kompiliert zu werden, aber nicht zu kompilieren.


Ich habe es nicht selbst ausprobiert (ich benutze Pyinstaller bei der Arbeit, aber ich habe es nicht auf meinem Heim -PC eingerichtet), aber das ist das, was ich denke, sollte in Ordnung sein:

a = Analysis(['main.py'])
excluded = ['myfile0.py', 'myfile1.py', 'myfile2.py']
a.scripts = [script from script in a.scripts if script not in excluded]
pyz = PYZ(a.pure)
exe = EXE(a.scripts, pyz, name="main.exe", exclude_binaries=1)
dist = COLLECT(exe, a.binaries, excluded, name="dist")

Andere Tipps

Eigentlich ist es eher so:

a = Analysis(['main.py'])
excluded = ['pathto\\myfile0.py', 'pathto\\myfile1.py', 'pathto\\myfile2.py']
a.scripts = [script from script in a.scripts if script[1] not in excluded]
pyz = PYZ(a.pure)
excluded_files_collect = [(f.split('\\')[-1],f,'DATA') for f in excluded]
exe = EXE(a.scripts, pyz, name="main.exe", exclude_binaries=1)
dist = COLLECT(exe, a.binaries, excluded_files_collect , name="dist")

Als Skript ist tatsächlich ein Tupel mit der Form:

('myfile0.py', 'pathto\\myfile0.py', 'PYSOURCE')

Möglicherweise müssen Sie auch verhindern, dass Dateien in Pyz aufgenommen werden, und beziehen Sie sich auf das PYZ -TOC, um festzustellen, ob sie einbezogen werden. Ich habe es geschafft, sie mit exkluden = [myFile0] in Analyse () zu vergrößern.

Ich denke Führen Sie einen Reißverschluss wie in PY2Exe (oder fügen Sie sie in der Spezifikation nicht hinzu) und versuchen Sie dann, die Anwendung ohne die Dateien auszuführen und Dateizugriffe mit Procmon zu überwachen.

Pyinstaller liefert die --ausschließen Option für Ihren Anwendungsfall, und es ist auch möglich, das Modul oder das Paket einzustellen, das Sie mit dem ignorieren möchten excludes Parameter von Analysis() in dem .spec Datei .

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