Für ein hierarchisches Projekt startet das erzeugte EXE-File von "pyinstaller" nicht.

7 views
Skip to first unread message

Mohsen Owzar

unread,
Nov 29, 2021, 7:41:41 AM11/29/21
to
Hi Leute,

Ich war auf dieser Seite und Ihr habt mir beim Problem des klickbaren QLineEdit geholfen. Jetzt ist das Projekt fast zu Ende und ich wollte aus dem Ganzen ein EXE-File generieren.

Nun habe Ich ein Problem mit der Ausführung von "pyinstaller" und zwar:

Wenn ich ein einzelnes Python-File kompiliere, wird ein EXE-File im "dist"-Verzeichnis erzeugt, mit dem ich das Programm starten kann und die GUI nach ein paar Sekunden erscheint.

Wenn ich aber versuche, mit " pyinstaller Relais_LastDauerTester.py" mein Projekt zu kompilieren und daraus ein EXE-File zu generieren, wird zwar ein ".exe"-File im "dist"-Verzeichnis erzeugt, passiert aber nichts, wenn ich sowohl im Windows-Explorer durch einen Doppelklick oder auf der DOS-Shell ausführe und es starte.

Der Mauszeiger ändert sich kurz zu einer Sanduhr und dann zurück und geschieht gar nichts.

Der einzige Unterschied zwischen diesen beiden Programmen ist, dass das erste nur ein einzelnes File ist und mein Projekt hierarchisch aufgebaut ist. Die Struktur des Projektes habe ich versucht, unten mit zwei "DIR"-Dos-Befehlen zu demonstrieren.

In PyCharm brauche nur das oberste File "Relais_LastDauerTester.py" zu starten, daher für "pyinstaller" habe ich dieses File genommen.

Aber wie es aussieht, muss ich für ein hierarchisches Projekt noch ein Argument angeben.

Ich habe über ganzes Wochenende gegoogelt, um eine brauchbare Lösung zu finden. Aber alles, was ich gefunden habe, war ausschliesslich für die Konvertierung eines ",py"-Files und nicht eines Projektes wie meins.

Bei manchen Vorschlägen musste man einen "Pause"- oder "input()"-Befehl in den Code hinzufügen, um das schnelle Verschwinden von DOS-Shell zu verhindern, was für mich überhaupt nicht in Frage kommt.

Habt Ihr eine Idee, woran es liegen könnte.

Ich bedanke mich im Voraus für jeden brauchbaren Hinweis, der mich weiterbringen könnte.

Gruss
Mohsen

PS
Ich arbeite an einem PC mit
1201 INFO: PyInstaller: 4.7
1202 INFO: Python: 3.9.5
1282 INFO: Platform: Windows-10-10.0.18363-SP0

Projekt-Struktur
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
...\SW\Relais_LastDauerTester_V0.5
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
<DIR> .idea
<DIR> Logfiles
<DIR> Relais_LastDauerTester
276 Relais_LastDauerTester.py
<DIR> Screenshotfiles
405 settings.ini

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
...\SW\Relais_LastDauerTester_V0.5\Relais_LastDauerTester
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
9’308 GPIOControl.py
90’618 GUI_View.py
998 main.py
28’625 TestControl.py
2’584 test_gpiocontrol.py
269 __init__.py
<DIR> __pycache__


Vereinfachte Projekt-Files mit den "import"-Zeilen
*******************************************************************
Relais_LastDauerTester.py.py
*******************************************************************
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from Relais_LastDauerTester.main import main

if __name__ == "__main__":
main()


*******************************************************************
main.py
*******************************************************************
import sys

from PyQt5.QtCore import *
from PyQt5.QtWidgets import QApplication
from .GUI_View import MainWindow

def main():
app = QApplication(sys.argv)

# Erstellt das Hauptfenster
window = MainWindow()
window.show()

sys.exit(app.exec_())

if __name__ == '__main__':
main()


*******************************************************************
GUI_View.py
*******************************************************************
import sys
import subprocess

import PyQt5.QtGui as qtg
from PyQt5.QtWidgets import (QLabel, QPushButton, QLineEdit, QCheckBox, QWidget,
QVBoxLayout, QHBoxLayout, QGridLayout, QDialog, QFileDialog)
from .TestControl import *

class MainWindow(QWidget):
def __init__(self):
super().__init__()

def createMainWindow(self):
...

def exitMainWindow(self):
...

def ChangeToPrefWindow(self):
self.prefwindow.show()
self.hide()

class PrefWindow(QWidget):
def __init__(self, parent=None):
super().__init__()
self.parent = parent
...
self.createPrefWindow()

def ChangeToMainWindow(self):
...

def createPrefWindow(self):
...

class CustomLineEdit(QLineEdit):
clicked = pyqtSignal()

def mousePressEvent(self, QMouseEvent):
self.clicked.emit()

class Keypad_Window_New(QDialog):
def __init__(self, num=0, parent=None):
super().__init__(parent)
self.parent = parent
...


TestContrl.py
*******************************************************************
from PyQt5.QtCore import *
from .GPIOControl import GPIOControl

class WorkerSignals(QObject):
signal_Update_Label = pyqtSignal()

class TestControl(QRunnable):
signals = WorkerSignals()

def __init__(self, parent=None):
super().__init__()
self.parent = parent
...


*******************************************************************
GPIOContrl.py
*******************************************************************
class GPIOControl:
def my_print(self, args):
if print_allowed == 1:
print(args)

def __init__(self):
...

Reply all
Reply to author
Forward
0 new messages