X-Received: by 2002:a0c:ec12:: with SMTP id y18mr42533555qvo.24.1638189701005; Mon, 29 Nov 2021 04:41:41 -0800 (PST) X-Received: by 2002:a05:6830:4119:: with SMTP id w25mr43685106ott.256.1638189700745; Mon, 29 Nov 2021 04:41:40 -0800 (PST) Path: csiph.com!weretis.net!feeder6.news.weretis.net!news.misty.com!border2.nntp.dca1.giganews.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: de.comp.lang.python Date: Mon, 29 Nov 2021 04:41:40 -0800 (PST) Injection-Info: google-groups.googlegroups.com; posting-host=31.165.67.106; posting-account=BtTavwoAAACMi3AFrA3U-JBERbxGUGhD NNTP-Posting-Host: 31.165.67.106 User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: Subject: =?UTF-8?Q?F=C3=BCr_ein_hierarchisches_Projekt_startet_das_erzeugte?= =?UTF-8?Q?_EXE=2DFile_von_=22pyinstaller=22_nicht=2E?= From: Mohsen Owzar Injection-Date: Mon, 29 Nov 2021 12:41:40 +0000 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Lines: 194 Xref: csiph.com de.comp.lang.python:5780 Hi Leute, Ich war auf dieser Seite und Ihr habt mir beim Problem des klickbaren QLine= Edit geholfen. Jetzt ist das Projekt fast zu Ende und ich wollte aus dem Ga= nzen ein EXE-File generieren. Nun habe Ich ein Problem mit der Ausf=C3=BChrung 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 P= rojekt zu kompilieren und daraus ein EXE-File zu generieren, wird zwar ein = ".exe"-File im "dist"-Verzeichnis erzeugt, passiert aber nichts, wenn ich s= owohl im Windows-Explorer durch einen Doppelklick oder auf der DOS-Shell au= sf=C3=BChre und es starte. Der Mauszeiger =C3=A4ndert sich kurz zu einer Sanduhr und dann zur=C3=BCck = und geschieht gar nichts. Der einzige Unterschied zwischen diesen beiden Programmen ist, dass das ers= te nur ein einzelnes File ist und mein Projekt hierarchisch aufgebaut ist. = Die Struktur des Projektes habe ich versucht, unten mit zwei "DIR"-Dos-Befe= hlen zu demonstrieren. In PyCharm brauche nur das oberste File "Relais_LastDauerTester.py" zu star= ten, daher f=C3=BCr "pyinstaller" habe ich dieses File genommen. Aber wie es aussieht, muss ich f=C3=BCr ein hierarchisches Projekt noch ein= Argument angeben. Ich habe =C3=BCber ganzes Wochenende gegoogelt, um eine brauchbare L=C3=B6s= ung zu finden. Aber alles, was ich gefunden habe, war ausschliesslich f=C3= =BCr die Konvertierung eines ",py"-Files und nicht eines Projektes wie mein= s. Bei manchen Vorschl=C3=A4gen musste man einen "Pause"- oder "input()"-Befeh= l in den Code hinzuf=C3=BCgen, um das schnelle Verschwinden von DOS-Shell z= u verhindern, was f=C3=BCr mich =C3=BCberhaupt nicht in Frage kommt. Habt Ihr eine Idee, woran es liegen k=C3=B6nnte. Ich bedanke mich im Voraus f=C3=BCr jeden brauchbaren Hinweis, der mich wei= terbringen k=C3=B6nnte. Gruss Mohsen PS Ich arbeite an einem PC mit=20 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 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& .idea Logfiles Relais_LastDauerTester 276 Relais_LastDauerTester.py Screenshotfiles 405 settings.ini &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ...\SW\Relais_LastDauerTester_V0.5\Relais_LastDauerTester &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 9=E2=80=99308 GPIOControl.py 90=E2=80=99618 GUI_View.py 998 main.py 28=E2=80=99625 TestControl.py 2=E2=80=99584 test_gpiocontrol.py 269 __init__.py __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__ =3D=3D "__main__": main() ******************************************************************* main.py ******************************************************************* import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import QApplication from .GUI_View import MainWindow def main(): app =3D QApplication(sys.argv) # Erstellt das Hauptfenster window =3D MainWindow() window.show() sys.exit(app.exec_()) if __name__ =3D=3D '__main__': main() ******************************************************************* GUI_View.py ******************************************************************* import sys import subprocess import PyQt5.QtGui as qtg from PyQt5.QtWidgets import (QLabel, QPushButton, QLineEdit, QCheckBox, QWi= dget, 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=3DNone): super().__init__() self.parent =3D parent ... self.createPrefWindow() def ChangeToMainWindow(self): ... def createPrefWindow(self): ... =20 class CustomLineEdit(QLineEdit): clicked =3D pyqtSignal() def mousePressEvent(self, QMouseEvent): self.clicked.emit() class Keypad_Window_New(QDialog): def __init__(self, num=3D0, parent=3DNone): super().__init__(parent) self.parent =3D parent ... =20 TestContrl.py ******************************************************************* from PyQt5.QtCore import * from .GPIOControl import GPIOControl class WorkerSignals(QObject): signal_Update_Label =3D pyqtSignal() class TestControl(QRunnable): signals =3D WorkerSignals() def __init__(self, parent=3DNone): super().__init__() self.parent =3D parent ... ******************************************************************* GPIOContrl.py ******************************************************************* class GPIOControl: def my_print(self, args): if print_allowed =3D=3D 1: print(args) def __init__(self): ...