2017-02-01 83 views
0

我一直在嘗試編譯一個使用PyQt5中的QtWebEngine的應用程序。該應用程序按預期工作,但在編譯時失敗。我花了幾天尋找解決方案,但到目前爲止我沒有運氣。我已經安裝了Python的brew和下載它的網站包。我也沒有任何運氣安裝了PyQt5 brew和pip3。運行pyinstaller腳本後,我得到「無法找到QtWebEngineProcess」錯誤。這是通過將QtWebEngineProcess.app文件複製到MacOS文件夾中解決的。接下來,我確信info.plist文件不是符號鏈接,而是實際的文件。之後,我將「org.qt-project.Qt.QtWebEngineCore」標誌添加到主應用程序info.plist中的「CFBundleIdentifier」中。這解決了找不到「QtWebEngineProcess」的問題,但它現在帶來了下面所述的錯誤。我也將「icudtl.dat」複製到MacOS文件夾中。我也嘗試重建與框架本身的依賴關係,並確保我沒有符號鏈接like stated here。我不熟悉install_name_tool,所以我被困在那裏。有任何想法嗎?任何人都可以使用QtWebEngine編譯pyqt應用程序嗎?用QtWebEngine編譯PyQt5應用程序

這裏是我所面對的錯誤:

[0201/130544:ERROR:icu_util.cc(162)] Invalid file descriptor to ICU data received. 
[0201/130544:FATAL:content_main_runner.cc(714)] Check failed: base::i18n::InitializeICU(). 
0 QtWebEngineCore      0x000000010d4b62e3 _ZN15QtWebEngineCore20FilePickerController11qt_metacallEN11QMetaObject4CallEiPPv + 12132083 
1 QtWebEngineCore      0x000000010d4c9809 _ZN15QtWebEngineCore20FilePickerController11qt_metacallEN11QMetaObject4CallEiPPv + 12211225 
2 QtWebEngineCore      0x000000010ce7cb03 _ZN15QtWebEngineCore20FilePickerController11qt_metacallEN11QMetaObject4CallEiPPv + 5605139 
3 QtWebEngineCore      0x000000010c918ee4 _ZN15QtWebEngineCore18WebContentsAdapter14faviconManagerEv + 28052 
4 QtWebEngineCore      0x000000010c917f48 _ZN15QtWebEngineCore18WebContentsAdapter14faviconManagerEv + 24056 
5 QtWebEngineCore      0x000000010c90e3b9 _ZN15QtWebEngineCore18WebContentsAdapterC2EPN7content11WebContentsE + 57 
6 QtWebEngineWidgets     0x000000011113ce4e _ZrsR11QDataStreamR17QWebEngineHistory + 1870 
7 QtWebEngineWidgets     0x000000011113ec20 _ZN14QWebEnginePageC1EP7QObject + 48 
8 QtWebEngineWidgets     0x000000011114ad17 _ZN14QWebEngineView6setUrlERK4QUrl + 55 
9 PyQt5.QtWebEngineWidgets.so   0x0000000111100ca3 _ZL26meth_QWebEngineView_setUrlP7_objectS0_ + 99 
10 Python        0x00000001080faae9 PyCFunction_Call + 233 
11 Python        0x0000000108187a81 PyEval_EvalFrameEx + 35729 
12 Python        0x00000001081884fc PyEval_EvalFrameEx + 38412 
13 Python        0x0000000108188e90 _PyEval_EvalCodeWithName + 2400 
14 Python        0x0000000108188f97 PyEval_EvalCodeEx + 71 
15 Python        0x00000001080d577a function_call + 186 
16 Python        0x00000001080a28d3 PyObject_Call + 99 
17 Python        0x00000001080bd9cc method_call + 140 
18 Python        0x00000001080a28d3 PyObject_Call + 99 
19 Python        0x00000001081184c1 slot_tp_init + 81 
20 Python        0x000000010810ef44 type_call + 212 
21 Python        0x00000001080a28d3 PyObject_Call + 99 
22 Python        0x0000000108182b65 PyEval_EvalFrameEx + 15477 
23 Python        0x0000000108188e90 _PyEval_EvalCodeWithName + 2400 
24 Python   

        0x0000000108188ff1 PyEval_EvalCode + 81 
25 Sailor        0x0000000106e52490 Sailor + 9360 
26 Sailor        0x0000000106e529f9 Sailor + 10745 
27 Sailor        0x0000000106e51464 Sailor + 5220 
28 ???         0x0000000000000003 0x0 + 3 

Trace/BPT trap: 5 

回答

0

它的工作對我來說:

def patch_osx_app(): 
    """Patch .app to copy missing data and link some libs. 
    See https://github.com/pyinstaller/pyinstaller/issues/2276 
    """ 
    app_path = os.path.join('dist', 'qutebrowser.app') 
    qtwe_core_dir = os.path.join('.tox', 'pyinstaller', 'lib', 'python3.6', 
           'site-packages', 'PyQt5', 'Qt', 'lib', 
           'QtWebengineCore.framework') 
    # Copy QtWebEngineProcess.app 
    proc_app = 'QtWebEngineProcess.app' 
    shutil.copytree(os.path.join(qtwe_core_dir, 'Helpers', proc_app), 
        os.path.join(app_path, 'Contents', 'MacOS', proc_app)) 
    # Copy resources 
    for f in glob.glob(os.path.join(qtwe_core_dir, 'Resources', '*')): 
     dest = os.path.join(app_path, 'Contents', 'Resources') 
     if os.path.isdir(f): 
      shutil.copytree(f, os.path.join(dest, f)) 
     else: 
      shutil.copy(f, dest) 
    # Link dependencies 
    for lib in ['QtCore', 'QtWebEngineCore', 'QtQuick', 'QtQml', 'QtNetwork', 
       'QtGui', 'QtWebChannel', 'QtPositioning']: 
     dest = os.path.join(app_path, lib + '.framework', 'Versions', '5') 
     os.makedirs(dest) 
     os.symlink(os.path.join(os.pardir, os.pardir, os.pardir, 'Contents', 
           'MacOS', lib), 
        os.path.join(dest, lib))