macos - यह एप्लिकेशन शुरू करने में विफल रहा क्योंकि यह Qt प्लेटफ़ॉर्म प्लगइन "कोको" को नहीं ढूंढ सका या लोड नहीं कर सका




python-3.x bundle (2)

मुझे क्यूटी निर्माता से क्यूटी विजेट ऐप शुरू करने के संदर्भ में यह समस्या थी।

मुझे परिवर्तनीय QT_PLUGIN_PATH को मूल्य <Qt-dir>/plugins (जहां <Qt-dir> क्यूटी निर्देशिका में फ़ोल्डर के लिए पूर्ण पथ है, जिसमें अन्य, bin , doc , include , lib और निश्चित रूप से plugins )।

यह शायद समस्या के मूल कारण को ठीक नहीं करता है, लेकिन यह एक त्वरित फिक्स था जो अब तक ठीक काम कर रहा है।

मुझे लगता है कि मैंने पिछले 20 घंटों में जो कुछ भी कर सकता था, लेकिन कुछ भी काम नहीं कर रहा था। मेरा ऐप चल रहा है और काम कर रहा है - जैसा कि यह होना चाहिए - मेरी एकमात्र समस्या यह है कि मैं इससे एक .app बंडल नहीं बना सकता। मैंने Py2App और cx_Freeze दोनों की कोशिश की लेकिन उनमें से कोई भी काम नहीं कर रहा है। बहु-मंच समर्थन के कारण मैं बाद वाले के साथ रहूंगा - यदि संभव हो तो।

setup.py इस तरह दिखता है:

import sys
from cx_Freeze import setup, Executable

base = None
if sys.platform == 'win32':
    base = 'Win32GUI'

OPTIONS = {'build_exe': {'includes': ['sip',
                                      'PyQt5',
                                      'PyQt5.QtCore',
                                      'PyQt5.QtGui',
                                      'PyQt5.QtWidgets',
                                      'PyQt5.QtMultimediaWidgets',
                                      'PyQt5.QtMultimedia',
                                      'PyQt5.QtNetwork']}}

EXECUTABLES = [Executable('main.py', base=base)]
NAME = 'coublet'
VERSION = '0.5.70'

setup(name = NAME,
      version = VERSION,
      options = OPTIONS,
      executables = EXECUTABLES)

मेरे पास त्रुटि संदेश यह है:

objc[28404]: Class NotificationReceiver is implemented in both
/Users/.../build/coublet-0.5.70.app/Contents/MacOS/QtWidgets and
/usr/local/Cellar/qt5/5.3.1/lib/QtWidgets.framework/Versions/5/QtWidgets. One of
the two will be used. Which one is undefined.
QObject::moveToThread: Current thread (0x7fc4b96e98b0) is not the object's thread
(0x7fc4b95dbc80).
Cannot move to target thread (0x7fc4b96e98b0)

On Mac OS X, 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".

Available platform plugins are: cocoa, minimal, offscreen.

Reinstalling the application may fix this problem.
Abort trap: 6

मेरा सिस्टम जानकारी:

Mac OS X  : 10.9.4
Python    :  3.4.1
cx_Freeze :  0.9
PyQt5:    :  5.3.1
- - -
Packages installed via: Homebrew and PIP

.app संरचना:

build/coublet-0.5.70.app
└── Contents
    ├── Frameworks
    ├── Info.plist
    ├── MacOS
    │   ├── PyQt5.QtCore.so
    │   ├── PyQt5.QtGui.so
    │   ├── PyQt5.QtMultimedia.so
    │   ├── PyQt5.QtMultimediaWidgets.so
    │   ├── PyQt5.QtNetwork.so
    │   ├── PyQt5.QtWidgets.so
    │   ├── Python
    │   ├── QtCore
    │   ├── QtCore.so
    │   ├── QtGui
    │   ├── QtGui.so
    │   ├── QtMultimedia
    │   ├── QtMultimedia.so
    │   ├── QtMultimediaWidgets
    │   ├── QtMultimediaWidgets.so
    │   ├── QtNetwork
    │   ├── QtNetwork.so
    │   ├── QtOpenGL
    │   ├── QtWidgets
    │   ├── QtWidgets.so
    │   ├── _bisect.so
    │   ├── _bz2.so
    │   ├── _codecs_cn.so
    │   ├── _codecs_hk.so
    │   ├── _codecs_iso2022.so
    │   ├── _codecs_jp.so
    │   ├── _codecs_kr.so
    │   ├── _codecs_tw.so
    │   ├── _datetime.so
    │   ├── _hashlib.so
    │   ├── _heapq.so
    │   ├── _json.so
    │   ├── _lzma.so
    │   ├── _md5.so
    │   ├── _multibytecodec.so
    │   ├── _opcode.so
    │   ├── _pickle.so
    │   ├── _posixsubprocess.so
    │   ├── _random.so
    │   ├── _scproxy.so
    │   ├── _sha1.so
    │   ├── _sha256.so
    │   ├── _sha512.so
    │   ├── _socket.so
    │   ├── _ssl.so
    │   ├── _struct.so
    │   ├── array.so
    │   ├── binascii.so
    │   ├── grp.so
    │   ├── imageformats
    │   │   ├── libqdds.dylib
    │   │   ├── libqgif.dylib
    │   │   ├── libqicns.dylib
    │   │   ├── libqico.dylib
    │   │   ├── libqjp2.dylib
    │   │   ├── libqjpeg.dylib
    │   │   ├── libqmng.dylib
    │   │   ├── libqsvg.dylib
    │   │   ├── libqtga.dylib
    │   │   ├── libqtiff.dylib
    │   │   ├── libqwbmp.dylib
    │   │   └── libqwebp.dylib
    │   ├── libcrypto.1.0.0.dylib
    │   ├── liblzma.5.dylib
    │   ├── library.zip
    │   ├── libreadline.6.dylib
    │   ├── libssl.1.0.0.dylib
    │   ├── main
    │   ├── math.so
    │   ├── platforms
    │   │   ├── libqcocoa.dylib
    │   │   ├── libqminimal.dylib
    │   │   └── libqoffscreen.dylib
    │   ├── pyexpat.so
    │   ├── readline.so
    │   ├── select.so
    │   ├── sip.so
    │   ├── termios.so
    │   ├── time.so
    │   ├── unicodedata.so
    │   └── zlib.so
    └── Resources

सवाल यह है कि मुझे लगता है कि मैं स्पष्ट कर रहा हूं: मैं क्या गलत कर रहा हूं? (या मैं क्या नहीं कर रहा हूँ?)


यह @ mfitzp के उत्तर के अतिरिक्त है।

यह क्यूटी प्लगइन्स दस्तावेज़ काम में आया था।

डिफ़ॉल्ट स्थानों की तलाश करने के लिए कि आपका क्यूटी ऐप खोज करने का प्रयास कर रहा है, आप निम्न आदेश का उपयोग कर सकते हैं:

$sudo dtruss MacOS/ncher 
  getattrlist("/ncher.app\0", 0x7FFF954B51A4, 0x7FFF5C8FDD20)              = 0 0
  getattrlist("/ncher.app/Contents\0", 0x7FFF954B51A4, 0x7FFF5C8FDD20)             = 0 0
  getattrlist("/ncher.app/Contents/MacOS\0", 0x7FFF954B51A4, 0x7FFF5C8FDD20)               = 0 0
  stat64("/ncher.app/Contents/MacOS\0", 0x7FFF5C8FDED8, 0x7FFF5C8FDD20)            = 0 0
  stat64("/ncher.app/Contents/MacOS/platforms/.\0", 0x7FFF5C8FDF58, 0x7FFF5C8FDD20)                = -1 Err#2
  open("/dev/tty\0", 0x1000000, 0x1FF)             = 5 0
  fcntl(0x5, 0x2, 0x1)             = 0 0
  close(0x5)               = 0 0
  write_nocancel(0x2, "This application failed to start because it could not find or load the Qt platform plugin \"cocoa\".\n\nReinstalling the application may fix this problem.\n\0", 0x97)              = 151 0
  sigprocmask(0x3, 0x7FFF5C8FE6B4, 0x0)            = 0x0 0
  __pthread_sigmask(0x3, 0x7FFF5C8FE6C0, 0x0)              = 0 0
  __pthread_kill(0x603, 0x6, 0x0)          = 0 0
  kevent64(0x4, 0x0, 0x0)          = -1 Err#4

एक बार जब मैंने अपनी libqcocoa.dylib प्लगइन की प्रतिलिपि बनाई, तो यह क्यूटी ऐप MacOS/platforms को देखने की कोशिश कर रहा है (इसके पथ को @ mfitzp के उत्तर के अनुसार install_name_tool कमांड द्वारा संशोधित किया गया था), मेरा आवेदन आकर्षण की तरह काम करता था।

बीटीडब्ल्यू यह मैक कोडिंग गाइड द्वारा सलाह दी जाती है ताकि यह निर्देशिका संरचना सही ढंग से सेटअप हो सके,

फ्रेमवर्क, प्लगइन ncher.app/Contents/MacOS निर्देशिका में ncher.app/Contents/MacOS