Форум сайта python.su
Всем доброго!
Подскажите пожалуйста как можно уменьшить размер проги скомпилированной c помощью py2exe.
Я подключаю только три модуля: sys, tkinter, _winreg. Ну и еще иногда пользуюсь tile.
А то 8 с лишним мегов, очень круто!
Офлайн
Python все-таки интерпретируемый язык :)
Вы пробовали использовать какие-нибудь упаковщики exe-файлов, вроде upx?
Офлайн
Cover Story с одинаковыми проблемами воюем :)
1. Кодировки. Выкидываем все, не используемые. Это касается кодирокок питона и из папки tcl
2. Не нужные модули. Во тут уж методом подбора. У меня приложение с ttk, PIL и прочее по мелочи, папка library.zip занимает 666 кб, думаю можно еще уменьшить
3. Неиспользуемые pyd, такие как unicodedata.pyd и bz.pyd… Как правило они не используются, хотя копируются в папку dist
4. Из tcl спокойно удаляем папку demos
5. В setup.py указываешь optimize:2, тогда все библиотеки компилятся в pyo вместо pyc, что еще чуть чуть уменьшит размер
В итоге, 6 мб у меня получилось. (напомню, питон 2.5.4, tcl/tk с tile, PIL)
Сжатое в rar или 7z- 2 mb. То есть этот размер- размер приложения для распространения по сети. (+100-300 кб, если используеш инсталлер какой нибудь)
Отредактировано (Янв. 9, 2009 12:52:19)
Офлайн
SvartalF Спасибо посмотрю вроде штука интересная!
igor.kaist В который раз спасибо! Сократил папку dist до 5,3 МБ
Офлайн
Где то промелькала инфа о том, что pythonХХ.dll можно каким то образом скомпилить, чтоб занимал меньше места. У кого есть соображения по этому поводу?
Добавлено:
Нашел вот что:
if *at least* the CJK codecs (which are like 1Mb big) are splitted out of
python25.dll.
Отредактировано (Янв. 9, 2009 15:55:14)
Офлайн
У меня возник еще один вопрос!
Можно ли подготовить набор библиотек и модулей для работы с скомпилированным exe файлом.
Например у меня есть несколько программ на Питоне и чтобы не засорять компьютер повторными библиотеками, я беру просто скомпилированный exe'шник и подсоединяю его к этим библиотекам. Такое возможно?
Офлайн
А ты попробуй :)
сделай уборку А, затем в другом месте уборку В. Теперь А.exe замени на В.еxe, все будет работать.
Офлайн
igor.kaist
Тебе, как опытному пользователю py2exe ;), наверное, есть много чего добавить к этому:
http://forum.script-coding.info/viewtopic.php?id=2494
Может, это… того… присоединишься? (извиняюсь за наглость :))
Офлайн
Пример для консольного варианта, у меня размер папки dist получился 3151 Кб в архиве zip 1845 кб причем “python setup.py py2exe” набирать не нужно просто запускаете скрипт на исполнение.
# Py2Exe version 0.6.3 setup file for console programs.
# If this is a windows GUI application replace the last line with
# windows = [{"script": 'myFile.py'}] )
#
# Enter the file name of your own .py code file in the last line, lets say it's test1.py
# so the last line should be: console = [{"script": 'test1.py'}] )
# then save this program as p2e_test1.py to the same directory where your code file is located
# Now run p2e_test1.py ...
#
# Two subfolders will be created, called build and dist.
# The dist folder contains your .exe file, MSVCR71.dll and w9xpopen.exe (needed for os.popen() only)
# Your .exe file contains your byte code, all needed modules and the Python interpreter.
# The MSVCR71.dll can be distributed, but is often already in the system32 folder.
# The build folder can be deleted.
# tested with Python24 and Py2Exe v0.6.3 by vegaseat 27may2006
from distutils.core import setup
import py2exe
import sys
# no arguments
if len(sys.argv) == 1:
sys.argv.append("py2exe")
# creates a standalone .exe file, no zip files
setup( options = {"py2exe": {"compressed": 1, "optimize": 2, "ascii": 1, "bundle_files": 1}},
zipfile = None,
# replace myFile.py with your own code filename here ...
console = [{"script": 'myFile.py'}] )
Отредактировано (Фев. 6, 2009 14:36:40)
Офлайн
Добавте поле excludes в файл setup.py, в нём перечислите модули которые не должны входить в готовый модуль.
from distutils.core import setup
import py2exe
import sys
# no arguments
if len(sys.argv) == 1:
sys.argv.append("py2exe")
# creates a standalone .exe file, no zip files
setup( options = {"py2exe": {"compressed": 1, "optimize": 2, "ascii": 1, "bundle_files": 1
,"excludes":'calendar' }},
zipfile = None,
# replace myFile.py with your own code filename here ...
console = [{"script": 'module1.py'}] )
Офлайн