Seite 1 von 1
Pyinstaller konfigurieren
Verfasst: Sonntag 15. Dezember 2024, 12:30
von Knollo
Hallo, ich versuche grad eine *.py-Datei umzupacken. Leider bricht der Prozess ab mit der Fehlermeldung:
Code: Alles auswählen
Aborting build process due to attempt to collect multiple Qt bindings packages: attempting to run hook for 'PyQt6', while hook for 'PySide6' has already been run! PyInstaller does not support multiple Qt bindings packages in a frozen application - either ensure that the build environment has only one Qt bindings package installed, or exclude the extraneous bindings packages via the module exclusion mechanism (--exclude command-line option, or excludes list in the spec file).
Die abhängigen Pakete sind:
Code: Alles auswählen
from mainwindow import Ui_MainWindow
from PySide6.QtCore import QDateTime, QSettings
from PySide6.QtGui import Qt, QFont, QColor, QLinearGradient, QPainter, QPen, QBrush
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidgetItem
from PySide6 import QtCharts
from datetime import datetime
import connect_db
import thingspeak_query
import sys
Ich lese daraus, dass 'multiple Qt bindings packages' in die spec-Datei extra einzubinden sind - richtig?
als Beispiel:
ist das richtig so?
Frage müssen alle Pakete, oder welche Pakete, so eingebunden werden, wie ist die Syntax?
Danke und eine schöne Weihnachtszeit - Stefan
Re: Pyinstaller konfigurieren
Verfasst: Sonntag 15. Dezember 2024, 12:52
von Sirius3
Wenn pyinstaller behauptet, dass Du sowohl pyqt als auch pyside benutzt, dann wird es schon recht haben. Du scheinst ja ui-Dateien in py-Dateien umgewandelt zu haben. Das könnte die Ursache sein und ist auch falsch. ui-Dateien lädt man direkt.
Re: Pyinstaller konfigurieren
Verfasst: Sonntag 15. Dezember 2024, 13:27
von __blackjack__
@Knollo: Die Interpretation ist falsch — 'multiple Qt bindings packages' muss man nicht extra eintragen, das geht einfach nicht. Es macht keinen Sinn, und im Thema
PyQt6 / QTableView() hast Du das doch selbst erlebt, dass das Probleme macht zwei Qt-Anbindungen zu mischen.
Re: Pyinstaller konfigurieren
Verfasst: Sonntag 15. Dezember 2024, 13:45
von Knollo
nun, wenn ich die .ui importier mit:
Code: Alles auswählen
import os
import sys
from PyQt6 import QtCore, QtGui, QtWidgets, uic
basedir = os.path.dirname(__file__)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
uic.loadUi(os.path.join(basedir, "mainwindow.ui"), self)
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
erscheint wiederum die Fehlermeldung:
die nachträgliche Installation von:
bringt auch keinen Erfolg.
Tut mir leid, wie ist der richtige Weg?
Re: Pyinstaller konfigurieren
Verfasst: Sonntag 15. Dezember 2024, 13:56
von __blackjack__
@Knollo: Ist das denn jetzt relevant für das ursprüngliche Problem? Also bist Du jetzt komplett von PySide auf PyQt umgestiegen? Falls Nein, macht das keinen Sinn Importprobleme bei PyQt zu lösen.
Re: Pyinstaller konfigurieren
Verfasst: Sonntag 15. Dezember 2024, 14:16
von Knollo
Ach Gottchen, nein ich möchte bei PySide6 bleiben. Die Hilfe von
https://doc.qt.io/qtforpython-6/tutoria ... files.html brachte Erfolg.
Dann werde ich heute Abend weiter basteln
Danke und einen schönen 3.Advent....
Re: Pyinstaller konfigurieren
Verfasst: Sonntag 15. Dezember 2024, 20:33
von Knollo
ach ja, ich hatte von dieser Seite:
Code: Alles auswählen
# File: main.py
import sys
from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QApplication
from PySide6.QtCore import QFile, QIODevice
if __name__ == "__main__":
app = QApplication(sys.argv)
ui_file_name = "mainwindow.ui"
ui_file = QFile(ui_file_name)
if not ui_file.open(QIODevice.ReadOnly):
print(f"Cannot open {ui_file_name}: {ui_file.errorString()}")
sys.exit(-1)
loader = QUiLoader()
window = loader.load(ui_file)
ui_file.close()
if not window:
print(loader.errorString())
sys.exit(-1)
window.show()
sys.exit(app.exec())
zum Import der .ui angewendet. An der Stelle von 'loader = QUiLoader()' hat Python gebockt - keine weiter Ausführung des Codes, keine Fehlermeldung.
Hab mich daher der Worte von __blackjack__ erinnert und schau an: in einem Modul hatte sich sich noch ein 'from PyQt6.QtCore import...' versteckt.
Das in ein ' from PySide6.QtCore' umgeschrieben brachte den gewünschten Erfolg.
lief bis Ende fehlerfrei durch - grandios.
Habt Dank für Eure Hilfe - Stefan
Re: Pyinstaller konfigurieren
Verfasst: Sonntag 15. Dezember 2024, 23:22
von __blackjack__
`sys.exit()` mit -1 ist keine gute Idee. Wie würdest Du *das* denn in einer Shell des Systems prüfen? Das ist ja sowieso schon reichlich unterspezifiziert und systemabhängig, da würde ich im Grunde nicht mal davon ausgehen, dass alle vorzeichenlosen Bytewerte wirklich überall funktionieren.
Re: Pyinstaller konfigurieren
Verfasst: Montag 16. Dezember 2024, 09:50
von Knollo
... als 'Hobbyschreiber' stelle ich mir solche Fragen nicht als erstes, man verlässt sich auf die Dokumentation. Aber auch in der abgespeckte Variante:
Code: Alles auswählen
# File: main.py
import sys
from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QApplication
from PySide6.QtCore import QFile, QIODevice
if __name__ == "__main__":
app = QApplication(sys.argv)
ui_file_name = "mainwindow.ui"
ui_file = QFile(ui_file_name)
loader = QUiLoader()
window = loader.load(ui_file)
ui_file.close()
window.show()
sys.exit(app.exec())
hatte sich Python in der Zeile ' loader = QUiLoader()' verschluckt, warum? Ich kann keinen anderen Weg finden, die .ui unter Nutzung von PySide6 zu laden.
Alle Tutorials etc. beziehen sich auf PyQt6.
Re: Pyinstaller konfigurieren
Verfasst: Montag 16. Dezember 2024, 10:07
von sparrow
Schläge auf den Rücken, helfen beim Verschlucken.
Ansonsten hilft die konkrete Fehlermeldung. So kann man nur raten, was da schief gehen könnte. Und das hilft wenig.