Domanda

Sono riuscito a impacchettare la mia app PYQT4 come applicazione "autonoma" su Windows, funziona.

Tuttavia, questa applicazione può aggiornare se stessa, che viene eseguita sostituendo il codice effettivo da me (file .py) con nuove versioni, scaricato via Internet.

Come posso dire a Pyinstaller fare il suo lavoro (mettendo insieme le DLL, generando il lanciatore con l'icona luccicante, ecc.), Ma non lasciare che i file .py non siano toccati?

Ho bisogno di quei file direttamente sul disco, affinché l'aggiornamento automatico funzioni.

È stato utile?

Soluzione

È possibile modificare il file SPEC su specificamente non includere file per nome (quando gli elenchi di costruzione), quindi assicurarsi che questi file siano inclusi: dovrei verificare se esiste un'opzione da includere ma non compilare.


Non ci ho provato da solo (uso Pyinstaller al lavoro ma non l'ho impostato sul mio PC di casa) ma questo è il genere di cose che penso dovrebbe essere OK:

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")

Altri suggerimenti

In realtà è più così:

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")

Poiché lo script è in realtà una tupla con la forma:

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

Potrebbe anche essere necessario impedire ai file di essere inclusi in PYZ, fare riferimento al PYZ TOC per vedere se vengono inclusi, sono riuscito a esprimerli usando Excludes = [myFile0] in Analysis ().

Penso che l'interprete incorporato nell'eseguibile cercherà comunque file .py nella stessa directory e/o pythonpath, Py2exe utilizza un file zip per i componenti python nativi, Iirc Pyinstaller li incorpora nell'eseguibile, forse c'è un'opzione per Mantieni una zip come in py2exe (o non aggiungili nelle specifiche), quindi prova a eseguire l'applicazione senza i file e monitora gli accessi dei file con Procmon.

Pyinstaller fornisce il --escludere Opzione per il tuo caso d'uso ed è anche possibile impostare il modulo o il pacchetto che si desidera ignorare utilizzando il excludes parametro di Analysis() nel .spec file .

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