How to solve "Could not load the Qt platform plugin "cocoa" in "" even though it was found."
-
Hi,
I have built a python program with a GUI (PyQt5) and wanted to make it into an .app for macOS. I have chosen Py2App to do this.
When creating a .app with Alias Mode in Py2App the app works fine, however, when I create the bundled version of the app, the app tries to launch but crashes.
I tried opening this app from the terminal and got this error:
(planner_venv) Febins-MacBook-Pro:v1.2 - Planner Builder Febin.J$ ./dist/Planner\ Builder.app/Contents/MacOS/Planner\ Builder qt.qpa.plugin: Could not load the Qt platform plugin "cocoa" in "" even though it was found. This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. Available platform plugins are: cocoa, minimal, offscreen, webgl. Abort trap: 6
I am using Python 3.10.1. Py2App 0.26.1. PyQt5 5.15.6. I am MacOS 12.1
-
@volcano_56782 Before starting the app from terminal set QT_DEBUG_PLUGINS variable to a non-zero value. You will then see more debug output, post it here.
See https://doc.qt.io/qt-5/debug.html -
@volcano_56782 Has nothing to do with Qt. Just how a variable is set in terminal.
export QT_DEBUG_PLUGINS=1 ./YOUR_APP
-
@jsulm said in How to solve "Could not load the Qt platform plugin "cocoa" in "" even though it was found.":
export QT_DEBUG_PLUGINS=1
./YOUR_APPThank you. I tried this and got this very long output:
QFactoryLoader::QFactoryLoader() checking directory path "/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms" ... QFactoryLoader::QFactoryLoader() looking at "/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqcocoa.dylib" Found metadata in lib /Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqcocoa.dylib, metadata= { "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3", "MetaData": { "Keys": [ "cocoa" ] }, "archreq": 0, "className": "QCocoaIntegrationPlugin", "debug": false, "version": 331264 } Got keys from plugin meta data ("cocoa") QFactoryLoader::QFactoryLoader() looking at "/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqminimal.dylib" Found metadata in lib /Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqminimal.dylib, metadata= { "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3", "MetaData": { "Keys": [ "minimal" ] }, "archreq": 0, "className": "QMinimalIntegrationPlugin", "debug": false, "version": 331264 } Got keys from plugin meta data ("minimal") QFactoryLoader::QFactoryLoader() looking at "/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqoffscreen.dylib" Found metadata in lib /Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqoffscreen.dylib, metadata= { "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3", "MetaData": { "Keys": [ "offscreen" ] }, "archreq": 0, "className": "QOffscreenIntegrationPlugin", "debug": false, "version": 331264 } Got keys from plugin meta data ("offscreen") QFactoryLoader::QFactoryLoader() looking at "/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqwebgl.dylib" Found metadata in lib /Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqwebgl.dylib, metadata= { "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3", "MetaData": { "Keys": [ "webgl" ] }, "archreq": 0, "className": "QWebGLIntegrationPlugin", "debug": false, "version": 331264 } Got keys from plugin meta data ("webgl") QFactoryLoader::QFactoryLoader() checking directory path "/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/Resources/lib/python3.10/PyQt5/Qt/plugins/platforms" ... QFactoryLoader::QFactoryLoader() looking at "/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/Resources/lib/python3.10/PyQt5/Qt/plugins/platforms/libqcocoa.dylib" Found metadata in lib /Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/Resources/lib/python3.10/PyQt5/Qt/plugins/platforms/libqcocoa.dylib, metadata= { "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3", "MetaData": { "Keys": [ "cocoa" ] }, "archreq": 0, "className": "QCocoaIntegrationPlugin", "debug": false, "version": 331264 } Got keys from plugin meta data ("cocoa") QFactoryLoader::QFactoryLoader() looking at "/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/Resources/lib/python3.10/PyQt5/Qt/plugins/platforms/libqminimal.dylib" Found metadata in lib /Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/Resources/lib/python3.10/PyQt5/Qt/plugins/platforms/libqminimal.dylib, metadata= { "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3", "MetaData": { "Keys": [ "minimal" ] }, "archreq": 0, "className": "QMinimalIntegrationPlugin", "debug": false, "version": 331264 } Got keys from plugin meta data ("minimal") QFactoryLoader::QFactoryLoader() looking at "/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/Resources/lib/python3.10/PyQt5/Qt/plugins/platforms/libqoffscreen.dylib" Found metadata in lib /Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/Resources/lib/python3.10/PyQt5/Qt/plugins/platforms/libqoffscreen.dylib, metadata= { "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3", "MetaData": { "Keys": [ "offscreen" ] }, "archreq": 0, "className": "QOffscreenIntegrationPlugin", "debug": false, "version": 331264 } Got keys from plugin meta data ("offscreen") QFactoryLoader::QFactoryLoader() looking at "/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/Resources/lib/python3.10/PyQt5/Qt/plugins/platforms/libqwebgl.dylib" Found metadata in lib /Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/Resources/lib/python3.10/PyQt5/Qt/plugins/platforms/libqwebgl.dylib, metadata= { "IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3", "MetaData": { "Keys": [ "webgl" ] }, "archreq": 0, "className": "QWebGLIntegrationPlugin", "debug": false, "version": 331264 } Got keys from plugin meta data ("webgl") QFactoryLoader::QFactoryLoader() checking directory path "/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/MacOS/platforms" ... Cannot load library /Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqcocoa.dylib: (dlopen(/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqcocoa.dylib, 0x0085): Library not loaded: @rpath/QtDBus.framework/Versions/5/QtDBus Referenced from: /Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqcocoa.dylib Reason: tried: '/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/MacOS/../Frameworks/QtDBus.framework/Versions/5/QtDBus' (no such file), '/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/../../lib/QtDBus.framework/Versions/5/QtDBus' (no such file), '/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/MacOS/../Frameworks/QtDBus.framework/Versions/5/QtDBus' (no such file), '/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/../../lib/QtDBus.framework/Versions/5/QtDBus' (no such file), '/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/MacOS/../Frameworks/QtDBus.framework/Versions/5/QtDBus' (no such file), '/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/Resources/lib/python3.10/PyQt5/Qt/lib/QtCore.framework/Versions/5/Frameworks/QtDBus.framework/Versions/5/QtDBus' (no such file), '/Library/Frameworks/QtDBus.framework/Versions/5/QtDBus' (no such file), '/System/Library/Frameworks/QtDBus.framework/Versions/5/QtDBus' (no such file)) QLibraryPrivate::loadPlugin failed on "/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqcocoa.dylib" : "Cannot load library /Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqcocoa.dylib: (dlopen(/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqcocoa.dylib, 0x0085): Library not loaded: @rpath/QtDBus.framework/Versions/5/QtDBus\n Referenced from: /Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqcocoa.dylib\n Reason: tried: '/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/MacOS/../Frameworks/QtDBus.framework/Versions/5/QtDBus' (no such file), '/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/../../lib/QtDBus.framework/Versions/5/QtDBus' (no such file), '/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/MacOS/../Frameworks/QtDBus.framework/Versions/5/QtDBus' (no such file), '/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/../../lib/QtDBus.framework/Versions/5/QtDBus' (no such file), '/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/MacOS/../Frameworks/QtDBus.framework/Versions/5/QtDBus' (no such file), '/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/Resources/lib/python3.10/PyQt5/Qt/lib/QtCore.framework/Versions/5/Frameworks/QtDBus.framework/Versions/5/QtDBus' (no such file), '/Library/Frameworks/QtDBus.framework/Versions/5/QtDBus' (no such file), '/System/Library/Frameworks/QtDBus.framework/Versions/5/QtDBus' (no such file))" qt.qpa.plugin: Could not load the Qt platform plugin "cocoa" in "" even though it was found. This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. Available platform plugins are: cocoa, minimal, offscreen, webgl. Abort trap: 6
I'm not sure what all this means though
-
@volcano_56782 said in How to solve "Could not load the Qt platform plugin "cocoa" in "" even though it was found.":
I'm not sure what all this means though
Well, you need to search for cocoa there.
What I see:
Cannot load library /Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqcocoa.dylib: (dlopen(/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqcocoa.dylib, 0x0085): Library not loaded: @rpath/QtDBus.framework/Versions/5/QtDBusYou seem to use paths with blanks, you should avoid that.
Does /Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqcocoa.dylib exist?
Also, it seems that cocoa plug-in requires DBus. -
@jsulm said in How to solve "Could not load the Qt platform plugin "cocoa" in "" even though it was found.":
Does /Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/plugins/platforms/libqcocoa.dylib exist?
No, this does not exist. How can I get DBus?
-
@volcano_56782 said in How to solve "Could not load the Qt platform plugin "cocoa" in "" even though it was found.":
How can I get DBus?
As far as I know DBus is not used on Mac, so don't know why cocoa plug-in wants it.
Maybe somebody with more MacOS expertise can help. -
Hi, for Qt 5..15.2 in Terminal, if you do a
otool -L libqcocoa.dylib it lists 5 dlls it needs, one of them is:
@rpath/QtDBus.framework/Versions/5/QtDBus
(and if you build a vanilla Hello World widget app in Qt. 5.15.2 QtDBus is used).Maybe when you compiled your app for distribution, perhaps that QtDbus dll didn't get copied? You can try copy it manually, start a Terminal and type:
cp -r ~/Qt/5.15.2/clang_64/lib/QtDBus.framework "/Users/Febin.J/Documents/Projects/Python Projects/v1.2 - Planner Builder/dist/Planner Builder.app/Contents/Frameworks"
Note: you'll need the quotes since you have spaces in your app path.
-
I've got this same problem, when using py2app to compose a python Qt application. I can run the application from the py2app dist folder, just fine. However, after I copy it to /Applications, I get the same error...
Got keys from plugin meta data ("webgl")
QFactoryLoader::QFactoryLoader() checking directory path "/Applications/englauncher.app/Contents/MacOS/platforms" ...
Cannot load library /Applications/englauncher.app/Contents/plugins/platforms/libqcocoa.dylib: (dlopen(/Applications/englauncher.app/Contents/plugins/platforms/libqcocoa.dylib, 133): Library not loaded: @rpath/QtDBus.framework/Versions/5/QtDBus
Referenced from: /Applications/englauncher.app/Contents/plugins/platforms/libqcocoa.dylib
Reason: image not found)
QLibraryPrivate::loadPlugin failed on "/Applications/englauncher.app/Contents/plugins/platforms/libqcocoa.dylib" : "Cannot load library /Applications/englauncher.app/Contents/plugins/platforms/libqcocoa.dylib: (dlopen(/Applications/englauncher.app/Contents/plugins/platforms/libqcocoa.dylib, 133): Library not loaded: @rpath/QtDBus.framework/Versions/5/QtDBus\n Referenced from: /Applications/englauncher.app/Contents/plugins/platforms/libqcocoa.dylib\n Reason: image not found)"
qt.qpa.plugin: Could not load the Qt platform plugin "cocoa" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.Available platform plugins are: cocoa, minimal, offscreen, webgl.
Anyone have any ideas?
-
@JimboNiss hi and welcome to devnet,
What exactly do you have in your py2app folder ?
Do you have the QDbus framework in your app bundle ? -
@SGaist, not sure what you are asking, but I just updated py2app via pip3, as a test. Didn't help. Here is my setup.py for it:
"""
This is a setup.py script generated by py2appletUsage:
python setup.py py2app
"""from setuptools import setup
APP = ['englauncher.py']
DATA_FILES = [('', ['applescript'])]
#DATA_FILES = []
OPTIONS = {
'iconfile': 'icon_SEO.icns',
'packages': ['cffi']
}setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)The QtDBus directory is in both /Applications/<app> and the py2app created ./disk/<app>...
Jims-MacBook-Pro:englauncher3 $ sudo find /Applications -name "QtDBus"
Password:
/Applications/englauncher.app/Contents/Resources/lib/python3.9/PyQt5/bindings/QtDBus
/Applications/englauncher.app/Contents/Resources/lib/python3.9/PyQt5/Qt5/lib/QtDBus.framework/Versions/5/QtDBus
Jims-MacBook-Pro:englauncher3 $ sudo find ./dist -name "QtDBus"
./dist/englauncher.app/Contents/Resources/lib/python3.9/PyQt5/Qt5/lib/QtDBus.framework/Versions/5/QtDBus
./dist/englauncher.app/Contents/Resources/lib/python3.9/PyQt5/bindings/QtDBus -
@SGaist said in How to solve "Could not load the Qt platform plugin "cocoa" in "" even though it was found.":
here
Ok, I was able to locate the rpath...
Jims-MacBook-Pro:englauncher3 $ otool -L ./dist/englauncher.app/Contents/plugins/platforms/libqcocoa.dylib |grep -i qtdbus
@rpath/QtDBus.framework/Versions/5/QtDBus (compatibility version 5.15.0, current version 5.15.2)Jims-MacBook-Pro:englauncher3 $ otool -L /Applications/englauncher.app/Contents/plugins/platforms/libqcocoa.dylib |grep -i qtdbus
@rpath/QtDBus.framework/Versions/5/QtDBus (compatibility version 5.15.0, current version 5.15.2)https://stackoverflow.com/questions/12521802/print-rpath-of-an-executable-on-macos/12522096#125220
Jims-MacBook-Pro:englauncher3 $ otool -l dist/englauncher.app/Contents/MacOS/englauncher | grep RPATH -A2
cmd LC_RPATH
cmdsize 48
path @executable_path/../Frameworks (offset 12)
Jims-MacBook-Pro:englauncher3 $ otool -l dist/englauncher.app/Contents/MacOS/englauncher
Jims-MacBook-Pro:englauncher3 $ otool -l /Applications/englauncher.app/Contents/MacOS/englauncher | grep RPATH -A2
cmd LC_RPATH
cmdsize 48
path @executable_path/../Frameworks (offset 12)Jims-MacBook-Pro:englauncher3 $ ls dist/englauncher.app/Contents/Frameworks
Python.framework libcrypto.1.1.dylib liblzma.5.dylib libmpdec.2.5.1.dylib libmpdec.3.dylib libssl.1.1.dylib
Jims-MacBook-Pro:englauncher3 $ ls /Applications/englauncher.app/Contents/Frameworks
Python.framework libcrypto.1.1.dylib liblzma.5.dylib libmpdec.2.5.1.dylib libmpdec.3.dylib libssl.1.1.dylibWhat's odd is I can run the application from the dist directory just fine:
./dist/englauncher.app/Contents/MacOS/englauncherBut, I get the error when running it from /Applications:
/Applications/englauncher.app/Contents/MacOS/englauncherI copied the application from ./dist to /Applications, so they should be the same.
-
HI, just guessing but maybe your app is picking up the QtDBus dylib from another place outside of your englauncher.app directory (and using relative paths).
To check, could you launch your app from the dist directory (i.e. where it runs successfully) and then open a Terminal and type
lsof -c englauncher
this will show what dlls/dylibs are loaded (and most importantly their paths). -
@hskoglund, the process doesn't keep running, so not sure I can run lsof on it.
Another thing I tried is completely uninstalling python3 from brew repository, and reinstalling it directly from python3, using Mac disk image. Had to reinstall my pip libraries, and got the same exact issue.
I'm at my wits end with this, and think it's a Big Sur issue, though can't prove it.
-
Hi, one way stop your app from exiting, you could try showing a message box, for example like this:
... app = QApplication([]) alert = QMessageBox() alert.setText('Click me when lsof -c is done') alert.exec() ...
then you should have time to do a
lsof -c englauncher
-
@hskoglund, that didn't help, as it's not even able to load the Qt libraries. I even created a simple test app with your code, and while I can run it from ./dist/testapp, as soon as I copy it to /Applications, it fails loading the libraries in the same way.