2017-09-28 3 views
0

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.

Antwort

0

Ich hatte mehr oder weniger das gleiche Problem mit Pyinstaller 3.3 und Conda Python 3.6.3 mit PyQt 5.6.0. Die .dylib-Dateien in /var/folders/... kollidieren mit denen im Installationsordner von conda. Sie erschienen immer wieder, auch nachdem ich sie gelöscht hatte.

Ich habe endlich diese Arbeit durch Angabe eines temporären Verzeichnisses zu --runtime-tmpdir zu pyinstaller.

z.B. pyinstaller --onefile --windowed --runtime-tmpdir /your/temp/directory --exclude-module matplotlib test.py

Verwandte Themen