2009-10-24 16 views
6

J'ai développé un petit programme en utilisant python et wxwidgets. C'est un programme très simple qui n'utilise qu'un mini-frame pour afficher des informations en cas de besoin, et le reste du temps il ne montre rien, seulement une icône dans la barre des tâches. Lorsque je compile l'exe en utilisant py2exe (mode fichier unique exe, optimisé), j'obtiens un fichier de 6 Mo de taille!comment réduire la taille de l'exe en utilisant py2exe

J'ai essayé de ne pas inclure certaines bibliothèques ou dll qui n'étaient pas nécessaires mais je ne vois toujours pas pourquoi j'obtiens un si gros fichier pour un mini-cadre et une icône dans la barre des tâches.

Existe-t-il un moyen de réduire la taille de l'exe généré avec py2exe?

ici est ce que je l'ai fait pour réduire un peu moi-même:

options = {"py2exe":{"excludes" : ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger', 
           'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl', 
           'Tkconstants', 'Tkinter'], 
        "dll_excludes": ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll', 'tcl84.dll', 
           'tk84.dll'], 

Merci.

+1

peut-être cela intégré runtime? –

Répondre

1

La majeure partie de l'espace est l'exécution de Python elle-même. py2exe ne "compile" pas votre programme en instructions natives x86, ou quelque chose comme ça. Il ne fait que regrouper Python, vos fichiers * .pyc et tous les modules que votre programme utilise dans un bundle qui s'exécute tout seul.

Vous pouvez donc choisir de distribuer uniquement vos fichiers * .pyc et laisser à l'utilisateur le soin de fournir sa propre distribution Python et d'installer les modules nécessaires. Ce n'est pas une option très populaire sur Windows, mais c'est ce qui se passe généralement partout ailleurs.

+1

Oui, je sais que py2exe ne compile pas mon programme, mais quand je parlais des "options" (comme indiqué dans mon message) disponibles pour réduire la taille. Je ne m'attends pas à avoir une taille inférieure à la durée d'exécution, mais l'intégration de ce dont j'ai besoin pourrait donner une taille acceptable pour un mini-cadre. – attwad

4

Le fait que votre programme soit simple ne signifie pas qu'il est petit. Votre programme a de nombreuses dépendances grâce à la pile wxWidget et 6 Mo ne semble pas si grand avec tout cela en tête.

Mais revenons à la question. Pour réduire un programme généré py2exe, vous pouvez faire quelques choses évidentes:

  1. Distribuez moins de choses: il semble que vous avez déjà commencé cette route. Regardez tout ce qui est distribué avec votre programme et éliminez-le si ce n'est pas nécessaire. DllDepend peut vous dire pourquoi une DLL est distribuée avec votre programme (probablement parce qu'un pyd en a besoin). Pour les autres modules, supprimez-les et essayez si cela fonctionne encore ...

  2. Compressez mieux: exécutez upx sur chacun de votre dll. Compressez votre programme/archive final avec un niveau de compression maximum de 7zip.