как уменьшить размер exe, используя py2exe - PullRequest
6 голосов
/ 24 октября 2009

Я разработал небольшую программу, используя python и wxwidgets. Это очень простая программа, которая использует только мини-рамку для отображения некоторой информации при необходимости, а в остальное время ничего не показывает, только значок на панели задач.

Когда я собираю exe-файл, используя py2exe (режим exe для одного файла, оптимизирован), я получаю файл размером 6 МБ!

Я пытался не включать некоторые библиотеки или DLL, которые не были нужны, но все же я не понимаю, почему я получаю такой большой файл для мини-рамки и значка на панели задач.

Есть ли способ уменьшить размер исполняемого файла, созданного с помощью py2exe?

вот что я сделал, чтобы немного уменьшить себя:

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'],

Спасибо.

Ответы [ 2 ]

4 голосов
/ 25 октября 2009

Тот факт, что ваша программа проста, не означает, что она маленькая. Ваша программа имеет много зависимостей от стека wxWidget, и 6 Мб выглядят не так уж и много с учетом всего этого.

Но вернемся к вопросу. Чтобы уменьшить программу, сгенерированную py2exe, вы можете сделать несколько очевидных вещей:

  1. Распределите меньше материала: кажется, вы уже начали этот путь. Посмотрите на все, что распространяется вместе с вашей программой, и устраните ее, если она не нужна. DllDepend может сказать вам, почему DLL распространяется с вашей программой (вероятно, потому что это нужно pyd). Для других модулей удалите их и попробуйте, если это все еще работает ...

  2. Сожмите это лучше: запускайте upx на каждой вашей dll. Сожмите окончательную программу / архив с максимальным уровнем сжатия 7zip.

1 голос
/ 24 октября 2009

Большую часть пространства занимает сама среда выполнения Python. py2exe не «компилирует» вашу программу с нативными инструкциями x86 или чем-то подобным. Он просто объединяет Python, ваши файлы * .pyc и любые модули, используемые вашей программой, в пакет, который запускается сам по себе.

Таким образом, вы можете распространять только ваши * .pyc файлы и оставлять их на усмотрение пользователя, чтобы они предоставили собственный дистрибутив Python и установили все необходимые модули. Это не очень популярный вариант в Windows, но это то, что обычно происходит везде.

...