[英]PyInstaller + PyQt5 + QML: QtQuick is not installed
我正在尝试使用pyinstaller,PyQt5和qml(请参阅下面的文件)使用以下命令构建应用程序。
pyrcc5 pyqt5_qml.qrc > pyqt5_qml_qrc.py
pyinstaller -w -F --noupx pyqt5_qml.py
(OSX 10.11.1,python 3.5.0,qt 5.5.1,pyinstaller 3.0)
pyqt5_qml.py运行正常(打开一个“Hello world!”窗口)但是内置应用程序抱怨module "QtQuick" version 2.4 is not installed
。 我想该模块尚未包含在内置应用程序中,但我不知道如何告诉pyinstaller这样做。
pyqt5_qml.py:
import os, sys
from PyQt5 import QtCore, QtWidgets, QtQml
import pyqt5_qml_qrc
def main():
global app
app = QtWidgets.QApplication(sys.argv)
engine = QtQml.QQmlApplicationEngine()
engine.load(QtCore.QUrl('qrc:/hello.qml'))
root = engine.rootObjects()[0]
root.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
hello.qml:
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Layouts 1.1
ApplicationWindow {
title: qsTr("Window")
Rectangle {
width: 360
height: 360
Text {
anchors.centerIn: parent
text: "Hello World"
}
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
}
}
pyqt5_qml.qrc:
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>hello.qml</file>
</qresource>
</RCC>
对我而言,在Windows上,这最终是尚未设置的QML2_IMPORT_PATH环境变量。 一旦我将其设置为“C:\\ Python35 \\ Lib \\ site-packages \\ PyQt5 \\ qml”就可以了!
使用PyInstaller我注意到它只是无法捆绑QML依赖关系然后冻结应用程序。 您可以通过从python站点包( <your_python_path>\\Lib\\site-packages\\PyQt5\\Qt\\qml
)复制QtQuick
和QtQuick.2
文件夹并将其QtQuick.2
来检查是否是您的情况:
QtQuick
QtQuick.2
your_executable.exe
如果应用程序在此之后工作,您可以编辑.spec
文件以自动捆绑这些文件夹(pyinstaller在首次运行时生成.spec
-file)。
# -*- mode: python -*-
import os
import site
block_cipher = None
site_packages_dir = site.getsitepackages()[1]
qml_dir = os.path.join(site_packages_dir, 'PyQt5', 'Qt', 'qml')
added_files = [
(os.path.join(qml_dir, 'QtQuick'), 'QtQuick'),
(os.path.join(qml_dir, 'QtQuick.2'), 'QtQuick.2'),
]
a = Analysis(['pyqt5_qml.py'],
binaries=None,
datas=added_files,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='app',
debug=False,
strip=False,
upx=False,
console=True,
)
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=False,
name='pyqt5_qml')
然后尝试针对此spec文件运行pyinstaller
: pyinstaller pyqt5_qml.spec
我希望这可以有所帮助
我正在努力解决同样的问题
几个小时后,我做了一些简单的事情,但对我来说它很有用
在我的main.py中,我的意思是你加载我添加的QML文件的文件
import PyQt5.QtQuick
然后运行pyinstaller:
pyinstaller -F - -onefile main.py
它奏效了
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.