Компиляция приложения PyQt5 с помощью QtWebEngine

Я пытался скомпилировать приложение, использующее QtWebEngine из PyQt5. Приложение работает по назначению, но при компиляции происходит сбой. Я провел пару дней в поисках решения, но пока мне не повезло. Я установил python как с brew, так и с загрузки пакета с его веб-сайта. Я также установил PyQt5 form brew и pip3 без везения. После запуска скрипта pyinstaller я получаю сообщение об ошибке «не могу найти QtWebEngineProcess». Это исправляется копированием файла QtWebEngineProcess.app в папку MacOS. Впоследствии я убедился, что файл info.plist является не символической ссылкой, а фактическим файлом. После этого я добавил флаг «org.qt-project.Qt.QtWebEngineCore» в «CFBundleIdentifier» в основном приложении info.plist. Это решает проблему отсутствия «QtWebEngineProcess», но теперь вызывает ошибку, указанную ниже. Я также скопировал «icudtl.dat» в папку MacOS. Я также попытался перестроить зависимости с помощью самого фреймворка и убедиться, что у меня нет символических ссылок , как указано здесь. . Я не знаком с install_name_tool, поэтому застрял там. Любые идеи? Кто-нибудь вообще может скомпилировать приложение pyqt с помощью QtWebEngine?

Вот ошибка, с которой я столкнулся:

[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

person DevilWarrior    schedule 01.02.2017    source источник


Ответы (3)


У меня это сработало после использования этой ветки и добавления нескольких настраиваемое исправление:

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))
person The Compiler    schedule 19.05.2017

Это какая-то проблема с QtWebEngine. Я полагал, что существует патч, исправляющий эту ошибку. Вы можете увидеть другую информацию в https://github.com/pyinstaller/pyinstaller/issues/2566< /а>

person Thiago Fonseca    schedule 18.05.2017

Файлы:

icudtl.dat
qtwebengine_devtools_resources.pak
qtwebengine_resources.pak
qtwebengine_resources_100p.pak
qtwebengine_resources_200p.pak

должен быть в .app/Contents/Resources

person glennr    schedule 11.05.2018