Ich glaube, ich habe in den letzten 24 Stunden alles gemacht, was ich konnte, aber nichts scheint zu funktionieren. Ich habe ein Python-Skript, von dem ich gerne ein Mac OS X-App-Bundle erstellen möchte. Ich lasse pyinstaller
mit den folgenden Wahlen laufen: pyinstaller --onefile --windowed --exclude-module matplotlib test.py
. Alles scheint gut (die Ausgabe ist meist INFO-Nachrichten mit ein paar dyld: Warnungen). Wenn ich jedoch versuche, die App auszuführen, wird sie sofort geschlossen. Versuchen Sie, erzeugt UNIX ausführbaren Skript test
schlägt mit dem folgenden Fehler führen:pyinstaller + pyqt5: konnte "Kakao" nicht finden oder laden
objc[24785]: Class RunLoopModeTracker is implemented in both /var/folders/gd/b5gj1m4x09b6jpb1llxk4vlr0000gn/T/_MEIOWkdrF/QtCore and /usr/local/Cellar/qt/5.9.1/lib/QtCore.framework/Versions/5/QtCore. One of the two will be used. Which one is undefined.
objc[24785]: Class NotificationReceiver is implemented in both /var/folders/gd/b5gj1m4x09b6jpb1llxk4vlr0000gn/T/_MEIOWkdrF/QtWidgets and /usr/local/Cellar/qt/5.9.1/lib/QtWidgets.framework/Versions/5/QtWidgets. One of the two will be used. Which one is undefined.
objc[24785]: Class QCocoaPageLayoutDelegate is implemented in both /var/folders/gd/b5gj1m4x09b6jpb1llxk4vlr0000gn/T/_MEIOWkdrF/QtPrintSupport and /usr/local/Cellar/qt/5.9.1/lib/QtPrintSupport.framework/Versions/5/QtPrintSupport. One of the two will be used. Which one is undefined.
objc[24785]: Class QCocoaPrintPanelDelegate is implemented in both /var/folders/gd/b5gj1m4x09b6jpb1llxk4vlr0000gn/T/_MEIOWkdrF/QtPrintSupport and /usr/local/Cellar/qt/5.9.1/lib/QtPrintSupport.framework/Versions/5/QtPrintSupport. One of the two will be used. Which one is undefined.
QObject::moveToThread: Current thread (0x7f9dbdbb8400) is not the object's thread (0x7f9dbbd8bc20).
Cannot move to target thread (0x7f9dbdbb8400)
You might be loading two sets of Qt binaries into the same process. Check that all plugins are compiled against the right Qt binaries. Export DYLD_PRINT_LIBRARIES=1 and check that only one set of binaries are being loaded.
This application failed to start because it could not find or load the Qt platform plugin "cocoa"
in "".
Available platform plugins are: cocoa, minimal, offscreen.
Reinstalling the application may fix this problem.
Abort trap: 6
logout
Saving session...completed.
[Process completed]
Ein bisschen mehr Infos:
Mac OS X: 10.11.6
Python: 2.7.13
qt: stable 5.9.1 (bottled) (via brew)
pyqt: stable 5.9 (bottled) (via brew)
pyinstaller: 3.3 (via pip)
Das Skript test.py
liest Daten aus xlsx
Tabelle (openpyxl
) und erstellt mehrere .docx
Dateien basierend auf der bereitgestellten Vorlage (docxtpl
). Es hat eine einfache Schnittstelle design.py
, die in .py
von .ui
über pyuic5
konvertiert wurde.
Was mache ich falsch? (oder was mache ich nicht?) Was kann ein solches Problem verursachen?
Meine Versuche, es zu beheben:
Anfangs habe ich nicht matplotlib
ausgeschlossen haben, aber es führte zu Runtime: RuntimeError: Path in environment MATPLOTLIBDATA not a directory [26131] Failed to execute script test
auch, dachte ich, dass der Fehler mit zwei Sätzen von qt Plugins möglicherweise aufgrund der Existenz von Qt4. Ich hatte ein komplettes Chaos mit Qt-Installationen. Es gab brew's qt5
(mit Python2 gebaut) und eine andere Macports qt5-mac
plus qt4-mac
. Ich habe qt4-mac
deinstalliert und qt5-mac
deaktiviert, aber es hat nicht geholfen.
Ich installierte wieder qt
, pyqt
und pyinstaller
, um sicherzustellen, dass alle von ihnen mit python 2.7
gebaut wurden.
Vor dem Wechsel zu pyinstaller
versuchte ich py2app
. Zuerst habe ich py2applet --make-setup test.py
verwendet, um eine Setup-Datei zu erstellen. Erneut wurde der Build normal ausgeführt, aber die Ausführung ist fehlgeschlagen. Das Ausführen von der Konsole (dist/test.app/Contents/MacOS/MyApp
) enthüllte, dass einige Bibliotheken fehlen: ImportError: No module named docxtpl
. Hinzufügen von Pyqt-Paketen python setup.py py2app -A --packages=PyQt5
hat auch nicht geholfen. Das manuelle Hinzufügen von OPTIONS = {'argv_emulation': True, 'includes':['sip','PyQt5','PyQt5.QtWidgets']}
zu setup.py
machte keinen Unterschied.
Ein weiterer Satz von qt-Plugins befindet sich in /var/folders/
, der Speicherort für pro Benutzer temporäre Dateien und Caches ist. Ich weiß nicht, wie genau OS X das schafft, aber weiß, dass es sicher ist, es zu säubern. Also habe ich allerdings vor dem Aufbau oder/und dem Ausführen nichts getan /var/folders/gd
zu putzen. Ausgelagerter Ordner wird wieder angezeigt und stört die Plugins von qt. Nicht sicher, dass dies die Wurzel des Problems ist, aber keine Ideen mehr haben, wie es zu beheben ist.