Solo para resumir las opciones aquí cuando los utilizo.
PyInstaller TOC - son, como dice la documentación:
Un TOC parece que hay una lista de tuplas de la forma (nombre, ruta, código_de_tipo). De hecho, es un conjunto ordenado, no una lista. Una TOC no contiene duplicados , donde la exclusividad se basa solamente en el nombre.
En otras palabras, simplemente:
a_toc = [('uname1','/path/info','BINARY'),('uname2','/path/to','EXTENSION')...]
Así, en su archivo .spec - una vez que tienes los resultados del análisis de la secuencia de comandos - a continuación, puede modificar aún más la respectiva tabla de contenido para cualquiera:
para específica archivos/módulos utilizan la diferencia (-) y la intersección (+) operaciones para modificar una tabla de contenido. *
Para agregar/eliminar listas de archivos/módulos iterar sobre el TOC y comparar con el código de coincidencia de patrón.
(* Como acotación al margen, por la diferencia de trabajar parece que debe convertir explícitamente a TOC()
y tenga en cuenta que, dado que es sólo el nombre que define de forma única el elemento del conjunto, sólo tiene que especificar que - por lo tanto ('sqlite3', None, None)
etc.)
Un ejemplo ilustrativo (tomado de un archivo .spec) está debajo donde, para bien o para mal, elimino todas las referencias a scipy, IPython y zmq; eliminar sqlite específicos, tcl/tk y ssl .DLL's; inserta un archivo .DLL de opencv faltante; y finalmente eliminar todas las carpetas de datos encontradas aparte de matplotlib ...
Si el Pyinstaller resultante .exe funcionará cuando un archivo .pyc intente cargar un esperado.DLL es discutible :-/
# 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")]