2013-10-08 11 views
7

Ich habe einen einfachen Code-Editor mit wxPython gemacht. Dateigröße (Python-Dateien) ist 1.3 KB. Aber wenn ich mit PyInstaller eine ausführbare Datei erstelle, bekomme ich 30 MB Datei! Gibt es eine Möglichkeit, die Dateigröße zu verringern? Btw, ich importiere nicht ganze wx Bibliothek, nur Komponenten, die ich brauche (ex from wx import Frame).PyInstaller sehr große Dateigröße

Verwenden von Linux, Fedora 18 64bit.

Antwort

5

wxPython ist eine große Bibliothek. Wenn Sie also eine ausführbare Datei erstellen, liegen sie in der Regel zwischen 20 und 30 MB. Beachten Sie auch, dass Python selbst sperrig ist, da Python eine interpretierende Sprache ist. Sie fügen also auch den Python-Interpreter ein, wenn Sie die exe erstellen.

Mit py2exe habe ich die ausführbare Datei unter 10 MB, aber es ist ein Schmerz und funktioniert nicht für alle Projekte. Es hängt wirklich davon ab, was du sonst noch benutzt. Sie können über meine Abenteuer mit py2exe here lesen.

Der andere Weg, um es kleiner zu machen, ist ein Komprimierungsprogramm zu verwenden. Das funktioniert manchmal und manchmal nicht.

Sie können den meisten dieser Tools zum Erstellen von Binärdateien auch sagen, Objekte auszuschließen. Sie können das auch versuchen.

+0

Danke für die Antwort. Ich werde versuchen, UPX zu verwenden, oder ich werde versuchen, mein Programm in C++ neu zu schreiben und es dann mit gcc – JadedTuna

+0

Sounds wie ein Plan zu kompilieren. Viel Glück! –

3

Ich habe eine ziemlich einfache wxPython-App ausgeliefert und es endete ~ 9,8 MB.

Wenn Sie das ArchivViewer.py-Skript verwenden, das Teil von PyInstaller ist, können Sie bestimmen, was so viel Platz in Anspruch nimmt.

Dies war mit Python 2.7.5, ohne UPX, und ohne diese Module:

excludesPassedToAnalysis = ['ssl', 
'_ssl', 
# coverage uses _socket. :(
#'_socket', 
'select', 
'pywin', 
'unittest', 
'win32ui', 
'bz2', 
'doctest', 
'os2emxpath', 
'servicemanager', 
'xml.parsers.expat', 
'sitecustomize', 
'tarflie', 
'email', 
'urllib', 
'urllib2', 
# This exclude isn't optional in order to get pubsub working 
# correctly in wxPython 2.9.3 or later. 
'wx.lib.pubsub.autosetuppubsubv1'] 

# These are removed from a.pure after the Analysis object is created. 
excludeEncodings = \ 
['encodings.base_64_codec', 
'encodings.big5', 
'encodings.big5hkscs', 
'encodings.bz2_codec', 
'encodings.cp037', 
'encodings.cp1006', 
'encodings.cp1026', 
'encodings.cp1140', 
'encodings.cp1258', 
'encodings.cp424', 
'encodings.cp437', 
'encodings.cp500', 
'encodings.cp720', 
'encodings.cp737', 
'encodings.cp775', 
'encodings.cp850', 
'encodings.cp852', 
'encodings.cp855', 
'encodings.cp856', 
'encodings.cp857', 
'encodings.cp858', 
'encodings.cp860', 
'encodings.cp861', 
'encodings.cp862', 
'encodings.cp863', 
'encodings.cp864', 
'encodings.cp865', 
'encodings.cp866', 
'encodings.cp869', 
'encodings.cp874', 
'encodings.cp875', 
'encodings.cp932', 
'encodings.cp949', 
'encodings.cp950', 
'encodings.euc_jis_2004', 
'encodings.euc_jisx0213', 
'encodings.euc_jp', 
'encodings.euc_kr', 
'encodings.gb18030', 
'encodings.gb2312', 
'encodings.gbk', 
'encodings.hex_codec', 
'encodings.hp_roman8', 
'encodings.hz', 
'encodings.iso2022_jp', 
'encodings.iso2022_jp_1', 
'encodings.iso2022_jp_2', 
'encodings.iso2022_jp_2004', 
'encodings.iso2022_jp_3', 
'encodings.iso2022_jp_ext', 
'encodings.iso2022_kr', 
'encodings.iso8859_10', 
'encodings.iso8859_11', 
'encodings.iso8859_13', 
'encodings.iso8859_14', 
'encodings.iso8859_15', 
'encodings.iso8859_16', 
'encodings.iso8859_2', 
'encodings.iso8859_3', 
'encodings.iso8859_4', 
'encodings.iso8859_5', 
'encodings.iso8859_6', 
'encodings.iso8859_7', 
'encodings.iso8859_8', 
'encodings.iso8859_9', 
'encodings.johab', 
'encodings.koi8_r', 
'encodings.koi8_u', 
'encodings.mac_arabic', 
'encodings.mac_centeuro', 
'encodings.mac_croatian', 
'encodings.mac_cyrillic', 
'encodings.mac_farsi', 
'encodings.mac_greek', 
'encodings.mac_iceland', 
'encodings.mac_latin2', 
'encodings.mac_roman', 
'encodings.mac_romanian', 
'encodings.mac_turkish', 
'encodings.mbcs', 
'encodings.palmos', 
'encodings.ptcp154', 
'encodings.quopri_codec', 
'encodings.raw_unicode_escape', 
'encodings.rot_13', 
'encodings.shift_jis', 
'encodings.shift_jis_2004', 
'encodings.shift_jisx0213', 
'encodings.string_escape', 
'encodings.tis_620', 
'encodings.undefined', 
'encodings.utf_32', 
'encodings.utf_32_be', 
'encodings.utf_32_le', 
'encodings.utf_7', 
'encodings.uu_codec', 
'encodings.zlib_codec',] 
+0

Können Sie erklären, wie Sie mit pii-archive_viewer die größten Abhängigkeiten in der Größe finden? Denn alles, was ich bekomme, ist eine Liste von Namen: -/Wo setzen Sie auch die zwei Ausschlusslisten? In Spezifikationen ist Feld ausgeschlossen? Sie verketten beide vorher? – gaborous

+0

Die spec-Datei ist im Moment nicht leicht zugänglich, aber wenn ich mich richtig erinnere, benutze den O-Befehl für pyi-archive-viewer, der dann die Daten ausgibt, die du in der show-Methode siehst: https://github.com/pyinstaller/pyinstaller/blob/develop/PyInstaller/utils/cliutils/archive_viewer.py. –

+0

Der erste oben genannte Ausschluss wird an den Analysis-Aufruf übergeben. Die zweite Ausschlussliste, wie im Kommentar erwähnt, sind die Modulnamen, die aus der reinen Eigenschaft des Ergebnisses des Analyseaufrufs entfernt werden. –