Pyinstaller Dateigröße der *.exe verkleinern / minimieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Py'nsight
User
Beiträge: 2
Registriert: Mittwoch 6. Oktober 2021, 08:54

Hallo zusammen,

zunächst: Ja ich habe mich erst versucht mein Problem selbst zu lösen und mich der Foren-Suche bedient mit folgenden Tags: +pyinstaller (gross|gross|groesse|dateigroesse) ohne direkt auf einen Hinweis gestoßen zu sien. Aber so richtig zufrieden bin ich mit meiner "Lösung" noch nicht, daher würde ich mich über professionellen Rat sehr freuen.

Ich habe ein Programm auf pyqt Basis geschrieben welches Pdf Dateien zusammenführt. Es hat eine einfach GUI die nur aus einem mainwindow mit fixer Größe besteht. Ich habe bereits in PyCharm eine virtuelle Umgebung eingerichtet und zur Kompilierung mittels pyinstaller außerdem upx dazu genommen, was hinsichlich der Dateigröße der exe (42 MB) jedoch fast nichts gebracht hat. Möglicherweise mache ich in Zusammenhang mit der venv in PyCharm und den Packages irgendetwas falsch. Ich kann nicht glauben dass es für ein so einfaches Programm nicht auch deutlich kleiner gehen sollte / müsste zumal an anderer Stelle in diesem Forum beschrieben wurde, dass eine *exe mit Pyqt so um die 20 MB groß sein sollte.Da pikepdf jetzt nicht das Riesenmodul ist müsste ich dann ja auch irgendwo / -wie dahinkommen?

Meine Imports aus dem Hauptprogramm:

Code: Alles auswählen

import sys
import os.path
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, QFileDialog
from pdfmerger_ui import Ui_MainWindow
from pathlib import Path
from pikepdf import Pdf, PasswordError, PdfError
und aus der Date pdfmerger_ui, die mittels Qt-Designer erstellt wurde

Code: Alles auswählen

from PyQt5 import QtCore, QtGui, QtWidgets
from os import path
Ich habe in der venv folgende Requirements hinterlegt, deren Module ich dann in PyCharm in der venv installiert habe:
PyQt5~=5.15.4
pikepdf~=3.1.0
pyinstaller~=4.5.1

Meine spec Datei sieht wie folgt aus:

Code: Alles auswählen

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

a = Analysis(['main.py'],
             pathex=['C:\\Users\\PZ\\PycharmProjects\\pythonProject8\\venv'],
             binaries=[],
             datas=[('Pfeiloben.png', '.'),('Pfeilunten.png', '.'),('Programmicon.png', '.')],
             hiddenimports=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,  
          [],
          name='Pdf-Merger',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None , icon='Programmicon.ico')
...und wurde so generiert. (datas im spec habe ich händisch hinzugefügt um die kleinen png icons einzubinden.):

pyinstaller -w -F -n Pdf-Merger -i Programmicon.ico main.py (= windowed, one-file)

Anschließend habe ich noch...

pyinstaller --upx-dir C:\Users\PZ\PycharmProjects\pythonProject8\venv\Files Pdf-Merger.spec

...gemacht und das Endergebnis sind eben 42 MB als Ausgabedatei :shock: .
Wo liegt mein Fehler :?:

Gruß
Py'insight
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Ich denke nicht, dass es einen Fehler gibt.
Die .exe ist ja ein Archiv, das beim Ausführen entpackt wird. Schau doch mal, was dort drin enthalten ist. Denn _alles_ was benötigt wird, um das Programm auszuführen, ist in diesem Archiv enthalten. Also der Python-Interpreter und alle Module, die ermittelt wurden. Und Qt ist kein Leichtgewicht.
LukeNukem
User
Beiträge: 232
Registriert: Mittwoch 19. Mai 2021, 03:40

Py'nsight hat geschrieben: Mittwoch 6. Oktober 2021, 10:55 Ich habe ein Programm auf pyqt Basis geschrieben welches Pdf Dateien zusammenführt. Es hat eine einfach GUI die nur aus einem mainwindow mit fixer Größe besteht. Ich habe bereits in PyCharm eine virtuelle Umgebung eingerichtet und zur Kompilierung mittels pyinstaller außerdem upx dazu genommen, was hinsichlich der Dateigröße der exe (42 MB) jedoch fast nichts gebracht hat. Möglicherweise mache ich in Zusammenhang mit der venv in PyCharm und den Packages irgendetwas falsch. Ich kann nicht glauben dass es für ein so einfaches Programm nicht auch deutlich kleiner gehen sollte / müsste zumal an anderer Stelle in diesem Forum beschrieben wurde, dass eine *exe mit Pyqt so um die 20 MB groß sein sollte.Da pikepdf jetzt nicht das Riesenmodul ist müsste ich dann ja auch irgendwo / -wie dahinkommen?

[...]

Wo liegt mein Fehler :?:
Wie so oft.. zwischen den Ohren, vermute ich mal. ;-)

Nein, im Ernst: Du baust -- vermute ich mal -- ein Standalone-Executable. Das heißt: da ist hinterher ein Python-Interpreter drin, außerdem pikepdf, und dann das große Monster: PyQt, also: Qt. Qt ist ein ziemlich umfangreiches Teil, und das... macht Dein Executable dann halt so groß. Bei mir unter Linux ist so ein Standalone-Executable mit Qt übrigens trotz upx sogar 65 MB groß... ;-)
Py'nsight
User
Beiträge: 2
Registriert: Mittwoch 6. Oktober 2021, 08:54

Hm, okay. Danke für Eure Einschätzung / Euren Kommentar dazu.
Antworten