L’application Python Frozen avec cx_Freeze est très lente à démarrer

J’ai une application python assez complexe qui utilise numpy, pandas, PySide, pyqtgraph et matplotlib, entre autres paquets. Lorsque je regroupe l’application avec cx_Freeze sous Windows, elle atteint 349 Mo.

Mon problème est que l’exécutable résultant a un très long temps de démarrage d’environ 15 secondes. Lorsque je parle de temps de démarrage, je parle de la durée avant que tout code ne soit exécuté. J’ai un script simple qui imprime “Hello” sur la console, et même cela prend environ 15 secondes pour fonctionner.

Est-ce que quelqu’un connaît une solution à ce problème, ou des moyens de le déboguer? Est-ce lent parce qu’il y a tellement de fichiers .dll provenant de tant de paquets?

EDIT: En utilisant un excellent outil appelé Process Montor , j’ai réduit mon problème au module pytz. Sur une charge particulière, 20 secondes ont été passées à interroger la bibliothèque.zip (où cx_Freeze met tout le bytecode compilé) pour pytz zoneinfo! J’ai récemment ajouté des pandas comme dépendance et les pandas utilisent pytz.

Voir cette image pour un échantillonnage de la sortie Process Monitor: Informations d'identification expurgées avec un rectangle bleuâtre

La solution que j’ai trouvée consiste à utiliser Process Monitor pour voir si cx_Freeze charge un module pour une durée déraisonnable. À l’aide de cet outil, j’ai également constaté qu’il fallait beaucoup de temps (peut-être 4 secondes) pour charger une police matplotlib particulière. Je l’ai enlevé et mon application a bien fonctionné.