ERROR:network_service_instance_impl.cc(262)] Сбой сетевой службы, перезапуск службы. Ошибка Pyqt5 при компиляции python только в исполняемый файл. Windows

#python #windows #pyqt5 #pyinstaller #exe

Вопрос:

Поэтому я разработал инструмент, часть которого включает в себя преобразование больших локальных (x)html-файлов в pdf. Для этого я использую PyQt5. Приблизившись к концу версии 1, я пытаюсь скомпилировать свой инструмент в файл .exe, чтобы его можно было распространить среди моей команды без необходимости загружать python/anaconda и все необходимые пакеты.

Проблема в том, что когда я конвертирую файлы python в exe-файлы, преобразование html в pdf больше не работает. Я полагаю, что это как-то связано с аргументом sys.argv в экземпляре QApplication, но я не смог найти правильный способ сделать это в исполняемом файле.

Я сегментировал код python из инструмента и попытался преобразовать его как автономный, но он все равно не работает, ниже приведен файл python, результат выполнения html_to_pdf.py файл в терминале, файл спецификации, используемый с pyinstaller, и вывод из html_to_pdf.exe бегите от терминала. Как вы можете видеть, файл python соответствует, а исполняемый файл-нет, с повторяющейся ошибкой, которую можно остановить, только закрыв весь терминал (Ctrl C не работает).

Версии

  • Windows 10 Корпоративная
  • Анаконда 4.10.1
  • Pyqt5 5.15.4
  • PyQtWebEngine 5.15.4
  • PyQt5-sip 12.9.0

html_to_pdf.py

 from PyQt5.QtCore import QCoreApplication
from PyQt5 import QtCore, QtWidgets
from PyQt5 import QtWebEngineWidgets
import os
import sys

Name = 'large'
updated_html_path = os.getcwd() '/large.html'

html_pdf = os.getcwd() '/' Name '.pdf'
print('checking if there is already an app')

app = QCoreApplication.instance()
print('checking for app', app)

if app is None:
    print('making a new app')
    print(sys.argv)
    # print(sys.arg)
    app = QApplication(sys.argv)
print('app', app)

page = QtWebEngineWidgets.QWebEnginePage()
print('page', page)

def handle_print_finished(filename, status):
    print("finished", filename, status)
    QtWidgets.QApplication.quit()
def handle_load_finished(status):
    if status:
        print('page printing to pdf')
        page.printToPdf(html_pdf)
    else:
        print("Failed")
        QtWidgets.QApplication.quit()
print('before starting the conversion')

page.pdfPrintingFinished.connect(handle_print_finished)
print('post step 1')      

page.loadFinished.connect(handle_load_finished)
print('post step 2')

page.load(QtCore.QUrl.fromLocalFile(updated_html_path))
print('post step 3')

app.exec_()
print('post executed')

app.quit()
print('post quit')
 

output from html_to_pdf.py run in the terminal:

 checking if there is already an app
checking for app None
making a new app
['html_to_pdf.py']
app <PyQt5.QtWidgets.QApplication object at 0x000001D9E9A5D160>
page <PyQt5.QtWebEngineWidgets.QWebEnginePage object at 0x000001D9EA01EDC0>
before starting the conversion
post step 1
post step 2
post step 3
page printing to pdf
finished C:Usersamackay012DocumentsCMASStack html2pdf/large.pdf True
post executed
post quit
 

html_to_pdf.spec

 block_cipher = None

a = Analysis(['html_to_pdf.py'],
             pathex=['C:\Users\amackay012\Documents\CMAS\Stack html2pdf'],
             binaries=[],
             datas=[],
             hiddenimports=['PyQtWebEngine'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

for data in a.datas:
    if 'QtWebEngineProcess.exe' in data[0]:
        a.datas[a.datas.index(data)] = (u'PyQt5\Qt5\bin\' data[0].split('\')[-1], data[1], data[2])
        
    if 'Qt\resources' in data[0]:
        a.datas[a.datas.index(data)] = (u'PyQt5\Qt5\resources\' data[0].split('resources\')[-1], data[1], data[2])
        
    if 'Qt\translations' in data[0]:
        print('inside translations if')
        a.datas[a.datas.index(data)] = (u'PyQt5\Qt5\translations\' data[0].split('translations\')[-1], data[1], data[2])

exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='html_to_pdf',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='html_to_pdf')
 

There was an issue with the pyqt files being in the wrong folder so I added the for loop to the spec file to fix that.

Output from running html_to_pdf.exe in terminal:

 checking if there is already an app
checking for app None
making a new app
['html_to_pdf.exe']
app <PyQt5.QtWidgets.QApplication object at 0x00000292D8EB60D0>
page <PyQt5.QtWebEngineWidgets.QWebEnginePage object at 0x00000292D8EB6040>
before starting the conversion
post step 1
post step 2
post step 3
[23680:13060:0709/112612.676:ERROR:network_service_instance_impl.cc(262)] Network service crashed, restarting service.
[23680:13060:0709/112613.857:ERROR:network_service_instance_impl.cc(262)] Network service crashed, restarting service.
[23680:13060:0709/112614.965:ERROR:network_service_instance_impl.cc(262)] Network service crashed, restarting service.
[23680:13060:0709/112616.078:ERROR:network_service_instance_impl.cc(262)] Network service crashed, restarting service.
[23680:13060:0709/112617.520:ERROR:network_service_instance_impl.cc(262)] Network service crashed, restarting service.
[23680:13060:0709/112618.794:ERROR:network_service_instance_impl.cc(262)] Network service crashed, restarting service.
[23680:13060:0709/112619.930:ERROR:network_service_instance_impl.cc(262)] Network service crashed, restarting service.
 

Я знаю, что это распространенная ошибка, однако я смог найти решения только для Linux-версий инструмента, установленного на github, или много ссылок на qutebrowser, которые я не уверен, что у меня есть? https://github.com/qutebrowser/qutebrowser/issues/6235

Я также заметил, что моя ошибка имеет (262), а не (286).