Приложение PySide6, упакованное в PyInstaller. Не удается загрузить 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_())
motor.spec
# -*- 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 в папку 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
действительно существует.
моя версия python- 3.8.6
PySide == 6.0.0
pyinstaller == 4.2
2 ответа
PyInstaller (начиная с версии 4.2) еще не поддерживает PySide6.
Я нашел первопричину. В нем отсутствует dll QT.
Я исправляю это, копируя все файлы .dll из папки Qt pyside в папку exe.
Тогда заводится идеально.
После этого я вручную удаляю лишние dll одну за другой, чтобы определить минимальные требования.
Наконец добавьте dll в файл спецификации