PyInstaller упакованное приложение PySide6 Не удается загрузить qtquick2plugin.dll

У меня есть приложение PySide6 + QML для упаковки в exe-файл с помощью PyInstaller.

Вот мой код:

main.qml

import QtQuick
import QtQuick.Layouts
import QtQuick.Controls

ApplicationWindow {
    id: window
    title: "Motor"
    width: 500
    height: 600
    visible: true

    maximumHeight: height
    maximumWidth: width

    minimumHeight: height
    minimumWidth: width
}

main.py

from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngine

if __name__ == "__main__":
    import sys 
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine(parent=app)
  
    engine.load("main.qml")
    sys.exit(app.exec_())
    if not engine.rootObjects():
        sys.exit(-1)
    sys.exit(app.exec_())

мотор.спец.

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['main.py'],
             pathex=['E:\\Projects\\motor\\GUI'],
             binaries=[],
             datas=[('main.qml', '.'), ('settings.ini', '.')],
             hiddenimports=['PySide6.QtCore', 'PySide6.QtGui', 'PySide6.QtQml'],
             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)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='MotorGUI',
          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='MotorGUI')

После пакета с pyinstaller motor.spec я скопировал папки plugins, qml и translations из папки python/site-pack/PySide6 в папку exe PySide6.

Когда я запускаю exe-файл, я получаю:

QQmlApplicationEngin failed to load component
file:///E:/Projects/motor/GUI/dist/MotorGUI/main.qml:1:1: Cannot load library E:\Projects\motor\GUI\dist\MotorGUI\PySide6\qml\QtQuick\qtquick2plugin.dll

qtquick2plugin.dll действительно существует.

моя версия питона 3.8.6

Писайд == 6.0.0

pyinstaller == 4.2


person Allen Shaw    schedule 02.02.2021    source источник


Ответы (2)


PyInstaller (начиная с версии 4.2) еще не поддерживает PySide6.

https://github.com/pyinstaller/pyinstaller/issues/5414

person M. Dudley    schedule 25.02.2021

Я нашел первопричину. В нем отсутствует dll QT.

Я исправляю это, копируя все файлы .dll из папки Qt pyside в папку exe.

Тогда заводится идеально.

После этого я вручную удаляю лишние dll одну за другой, чтобы определить минимальные требования.

Наконец добавьте dll в файл спецификации

person Allen Shaw    schedule 28.02.2021