Solo per riepilogare le opzioni qui mentre le uso.
PyInstaller TOC di - sono, come dice la documentazione:
Un sommario sembra essere una lista di tuple nella forma (nome, percorso, typecode). In realtà, è un insieme ordinato, non una lista. Un sommario non contiene duplicati , in cui l'univocità si basa solo sul nome.
In altre, semplicemente:
a_toc = [('uname1','/path/info','BINARY'),('uname2','/path/to','EXTENSION')...]
Quindi, nel file .spec - una volta che hai i risultati di analisi dello script - è quindi possibile ulteriormente modificare il rispettivo TOC del mediante:
per specifico file/moduli utilizzano la differenza (-) e intersezione (+) operazioni per modificare un sommario. *
Per aggiungere/rimuovere liste di file/moduli iterare sul TOC e confrontare con il codice di corrispondenza del modello.
(* Per inciso, per la differenza di lavorare a quanto pare è necessario in modo esplicito cast TOC()
e notare che dal momento che è solo il nome che definisce in modo univoco l'elemento del set, avete solo bisogno di specificare che - quindi ('sqlite3', None, None)
ecc.)
Un esempio illustrativo (tratto da un file .spec) è sotto dove - nel bene o nel male - rimuovo tutti i riferimenti a scipy, IPython e zmq; eliminare sqlite specifici, tcl/tk e ssl .DLL; inserire un file opencv .DLL mancante; e infine rimuovere tutte le cartelle di dati trovate oltre a quelle di matplotlib ...
Se il Pyinstaller .exe risultante funzionerà quando un file .pyc tenta di caricare un file previsto.La DLL è discutibile :-/
# Manually remove entire packages...
a.binaries = [x for x in a.binaries if not x[0].startswith("scipy")]
a.binaries = [x for x in a.binaries if not x[0].startswith("IPython")]
a.binaries = [x for x in a.binaries if not x[0].startswith("zmq")]
# Target remove specific ones...
a.binaries = a.binaries - TOC([
('sqlite3.dll', None, None),
('tcl85.dll', None, None),
('tk85.dll', None, None),
('_sqlite3', None, None),
('_ssl', None, None),
('_tkinter', None, None)])
# Add a single missing dll...
a.binaries = a.binaries + [
('opencv_ffmpeg245_64.dll', 'C:\\Python27\\opencv_ffmpeg245_64.dll', 'BINARY')]
# Delete everything bar matplotlib data...
a.datas = [x for x in a.datas if
os.path.dirname(x[1]).startswith("C:\\Python27\\Lib\\site-packages\\matplotlib")]