From 728e94e37d44229d8f31dee4761eaf66f89bf01e Mon Sep 17 00:00:00 2001 From: Christian Tismer Date: Tue, 19 Mar 2019 17:00:08 +0100 Subject: Automatically Test Small Example With PyInstaller A simple hello.py script was modified for running in PyInstaller and stopping to execute after 2 seconds. The reason is to test that PyInstaller works correctly together with the embedded mode of the signature extension on all platforms. The script did first not work on Windows. This is now solved, after an import in pyside2_config.py is fixed. Currently, there are several configuration errors in COIN. Errors are therefore skipped in the PyInstaller build. The test tests only if the generated script works. Change-Id: I7a1b1e738d523b83cc3fe5beafa7e2579f9c7f48 Reviewed-by: Friedemann Kleint --- examples/examples.pyproject | 1 + examples/installer_test/hello.py | 103 +++++++++++++++++++++++++++++++++++++++ examples/utils/pyside2_config.py | 4 +- 3 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 examples/installer_test/hello.py (limited to 'examples') diff --git a/examples/examples.pyproject b/examples/examples.pyproject index 5c96e9978..559989f9f 100644 --- a/examples/examples.pyproject +++ b/examples/examples.pyproject @@ -16,6 +16,7 @@ "declarative/signals/qmltopy3/main.py", "declarative/signals/qmltopy4/main.py", "declarative/usingmodel.py", + "installer_test/hello.py" "macextras/macpasteboardmime.py", "multimedia/audiooutput.py", "multimedia/camera.py", diff --git a/examples/installer_test/hello.py b/examples/installer_test/hello.py new file mode 100644 index 000000000..77b050206 --- /dev/null +++ b/examples/installer_test/hello.py @@ -0,0 +1,103 @@ +# This Python file uses the following encoding: utf-8 +# It has been edited by fix-complaints.py . + +############################################################################# +## +## Copyright (C) 2019 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" +hello.py +-------- + +This simple script shows a label with changing "Hello World" messages. +It can be used directly as a script, but we use it also to automatically +test PyInstaller. See testing/wheel_tester.py . + +When used with PyInstaller, it automatically stops its execution after +2 seconds. +""" +from __future__ import print_function + +import sys +import random +import platform +import time + +from PySide2.QtWidgets import (QApplication, QLabel, QPushButton, + QVBoxLayout, QWidget) +from PySide2.QtCore import Slot, Qt, QTimer + +class MyWidget(QWidget): + def __init__(self): + QWidget.__init__(self) + + self.hello = ["Hallo Welt", "你好,世界", "Hei maailma", + "Hola Mundo", "Привет мир"] + + self.button = QPushButton("Click me!") + self.text = QLabel("Hello World embedded={}".format(sys.pyside_uses_embedding)) + self.text.setAlignment(Qt.AlignCenter) + + self.layout = QVBoxLayout() + self.layout.addWidget(self.text) + self.layout.addWidget(self.button) + self.setLayout(self.layout) + + # Connecting the signal + self.button.clicked.connect(self.magic) + + @Slot() + def magic(self): + self.text.setText(random.choice(self.hello)) + +if __name__ == "__main__": + print("Start of hello.py ", time.ctime()) + print(" sys.version = {}".format(sys.version.splitlines()[0])) + print(" platform.platform() = {}".format(platform.platform())) + + app = QApplication() + + widget = MyWidget() + widget.resize(800, 600) + widget.show() + if sys.pyside_uses_embedding: + milliseconds = 2 * 1000 # run 2 second + QTimer.singleShot(milliseconds, app.quit) + retcode = app.exec_() + print("End of hello.py ", time.ctime()) + sys.exit(retcode) diff --git a/examples/utils/pyside2_config.py b/examples/utils/pyside2_config.py index c62b38cad..973410100 100644 --- a/examples/utils/pyside2_config.py +++ b/examples/utils/pyside2_config.py @@ -1,6 +1,6 @@ ############################################################################# ## -## Copyright (C) 2018 The Qt Company Ltd. +## Copyright (C) 2019 The Qt Company Ltd. ## Contact: http://www.qt.io/licensing/ ## ## This file is part of the Qt for Python examples of the Qt Toolkit. @@ -149,7 +149,7 @@ def shared_library_suffix(): def import_suffixes(): if (sys.version_info >= (3, 4)): - import importlib + import importlib.machinery return importlib.machinery.EXTENSION_SUFFIXES else: import imp -- cgit v1.2.3 From 8f74adea7cffdf2e1158df15ba0105dc40b24fa3 Mon Sep 17 00:00:00 2001 From: Christian Tismer Date: Tue, 23 Apr 2019 15:00:34 +0200 Subject: Provide a spec file for hello.app used by wheel_tester The PyInstaller test was done with minimalistic options to keep things as simple as possible. This had the side effect that on certain Python versions and platforms things were touched that created errors, although those things were nowhere in use. It turned out that the generated hello_app.spec file contains the result of an in-depth analysis which touches so many non-existing modules. When using just the generated spec file and no other option, the analysis is almost skipped and the generation of an executable avoids further problems and is faster. This patch removes all arguments and uses a spec file instead. The arguments are kept in a comment, just in case. Change-Id: I17c43a588bc6f95f62fc3104a047dc08e8d8e70d Reviewed-by: Friedemann Kleint Reviewed-by: Cristian Maureira-Fredes --- examples/installer_test/hello_app.spec | 85 ++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 examples/installer_test/hello_app.spec (limited to 'examples') diff --git a/examples/installer_test/hello_app.spec b/examples/installer_test/hello_app.spec new file mode 100644 index 000000000..d096ab170 --- /dev/null +++ b/examples/installer_test/hello_app.spec @@ -0,0 +1,85 @@ +# This Python file uses the following encoding: utf-8 +# It has been edited by fix-complaints.py . + +############################################################################# +## +## Copyright (C) 2019 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of Qt for Python. +## +## $QT_BEGIN_LICENSE:LGPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 3 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL3 included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 3 requirements +## will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 2.0 or (at your option) the GNU General +## Public license version 3 or any later version approved by the KDE Free +## Qt Foundation. The licenses are as published by the Free Software +## Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-2.0.html and +## https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +""" +hello_app.spec + +This is almost the spec file generated by running PyInstaller. +Just the paths were adjusted and made relative. +As an effect, all the analysis is avoided, and the log file of +wheel_tester.py went down from 775 lines to 278 lines. :-) +""" + +block_cipher = None + + +a = Analysis(['hello.py'], + pathex=['pyinstaller'], + binaries=[], + datas=[], + hiddenimports=[], + 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='hello_app', + 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, + name='hello_app') -- cgit v1.2.3