diff options
author | Christian Tismer <tismer@stackless.com> | 2021-07-22 11:49:25 +0200 |
---|---|---|
committer | Christian Tismer <tismer@stackless.com> | 2021-07-28 18:41:46 +0200 |
commit | 45a8fafb9c445ebcdea125b0c20cd14dc42784d1 (patch) | |
tree | 386c41e804e557789d8e0c3b8c6c4ab8f86c3d9c | |
parent | 9b5fa60d1fed5025e97c393ba1bab80f81ba833a (diff) |
Remove signature loader completely from physical FS
This proposal was discussed.
It was also tested with Nuitka and cx_freeze.
[ChangeLog][shiboken6] Python support files are now always
embedded. There is no longer a physical copy installed in the FS.
Reasoning is: We always had the signature module in real
Python files and also as an embedded ZIP file.
With the solution to PYSIDE-1621 we suddenly had a way
to avoid accessing the file system completely. The
remaining question is: Why should we keep the files in
the installation at all?
Long time ago, it was said that the source files were
needed to see tracebacks. But tracebacks are visible the
same way, regardless if the files exist as physical files
or only in memory. The error messages will be as verbose
as always.
Personally, I see it more as a drawback, because parts of
our application become vulnerable by external manipulation.
By the complete virtualization, the system is as
self-contained as a binary executable.
Task-number: PYSIDE-1621
Change-Id: I821545fb5d52465b69bb2c172bdfb43894ac2109
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
-rw-r--r-- | examples/installer_test/hello.py | 3 | ||||
-rw-r--r-- | sources/pyside6/PySide6/support/generate_pyi.py | 2 | ||||
-rw-r--r-- | sources/pyside6/tests/pysidetest/CMakeLists.txt | 1 | ||||
-rw-r--r-- | sources/pyside6/tests/pysidetest/embedding_test.py | 80 | ||||
-rw-r--r-- | sources/shiboken6/libshiboken/embed/signature_bootstrap.py | 37 | ||||
-rw-r--r-- | sources/shiboken6/shibokenmodule/CMakeLists.txt | 9 |
6 files changed, 4 insertions, 128 deletions
diff --git a/examples/installer_test/hello.py b/examples/installer_test/hello.py index 94d82d4ab..775fe1532 100644 --- a/examples/installer_test/hello.py +++ b/examples/installer_test/hello.py @@ -62,8 +62,7 @@ from PySide6.QtWidgets import (QApplication, QLabel, QPushButton, from PySide6.QtCore import Slot, Qt, QTimer is_compiled = "__compiled__" in globals() # Nuitka -uses_embedding = sys.pyside_uses_embedding # PyInstaller -auto_quit = "Nuitka" if is_compiled else "PyInst" if uses_embedding else False +auto_quit = "Nuitka" if is_compiled else "PyInst" class MyWidget(QWidget): diff --git a/sources/pyside6/PySide6/support/generate_pyi.py b/sources/pyside6/PySide6/support/generate_pyi.py index e618ae0a7..ecc04019b 100644 --- a/sources/pyside6/PySide6/support/generate_pyi.py +++ b/sources/pyside6/PySide6/support/generate_pyi.py @@ -99,8 +99,6 @@ def generate_all_pyi(outpath, options): if __name__ == "__main__": - # PYSIDE-1621: Enforce embedding to ensure that it always works. - sys.pyside_uses_embedding = True parser = argparse.ArgumentParser( description="This script generates the .pyi file for all PySide modules.") parser.add_argument("modules", nargs="+", diff --git a/sources/pyside6/tests/pysidetest/CMakeLists.txt b/sources/pyside6/tests/pysidetest/CMakeLists.txt index 7717fc8c6..d63326eb9 100644 --- a/sources/pyside6/tests/pysidetest/CMakeLists.txt +++ b/sources/pyside6/tests/pysidetest/CMakeLists.txt @@ -136,7 +136,6 @@ PYSIDE_TEST(decoratedslot_test.py) PYSIDE_TEST(delegatecreateseditor_test.py) PYSIDE_TEST(all_modules_load_test.py) PYSIDE_TEST(bug_1016.py) -PYSIDE_TEST(embedding_test.py) PYSIDE_TEST(enum_test.py) PYSIDE_TEST(homonymoussignalandmethod_test.py) PYSIDE_TEST(iterable_test.py) diff --git a/sources/pyside6/tests/pysidetest/embedding_test.py b/sources/pyside6/tests/pysidetest/embedding_test.py deleted file mode 100644 index 074edff1b..000000000 --- a/sources/pyside6/tests/pysidetest/embedding_test.py +++ /dev/null @@ -1,80 +0,0 @@ -############################################################################# -## -## Copyright (C) 2019 The Qt Company Ltd. -## Contact: https://www.qt.io/licensing/ -## -## This file is part of PySide6. -## -## $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$ -## -############################################################################# - -import os -import sys -import unittest - -from pathlib import Path -sys.path.append(os.fspath(Path(__file__).resolve().parents[1])) -from init_paths import init_test_paths -init_test_paths(False) - -# This test tests the embedding feature of PySide. -# Normally, embedding is only used when necessary. -# By setting the variable "pyside_uses_embedding", -# we enforce usage of embedding. - - -class EmbeddingTest(unittest.TestCase): - - # def test_pyside_normal(self): - # import sys - # self.assertFalse(hasattr(sys, "pyside_uses_embedding")) - # import PySide6 - # # everything has to be imported - # self.assertTrue("PySide6.support.signature" in sys.modules) - # # there should be a variale in sys, now (no idea if set) - # self.assertTrue(hasattr(sys, "pyside_uses_embedding")) - - # Unfortunately, I see no way how to shut things enough down - # to trigger a second initiatization. Therefore, only one test :-/ - def test_pyside_embedding(self): - import sys - self.assertFalse(hasattr(sys, "pyside_uses_embedding")) - sys.pyside_uses_embedding = "anything true" - import PySide6 - # everything has to be imported - self.assertTrue("PySide6.support.signature" in sys.modules) - self.assertEqual(sys.pyside_uses_embedding, True) - # We no longer use a physical zip file. - - -if __name__ == '__main__': - unittest.main() diff --git a/sources/shiboken6/libshiboken/embed/signature_bootstrap.py b/sources/shiboken6/libshiboken/embed/signature_bootstrap.py index 3078ac90a..badf0f4d2 100644 --- a/sources/shiboken6/libshiboken/embed/signature_bootstrap.py +++ b/sources/shiboken6/libshiboken/embed/signature_bootstrap.py @@ -103,40 +103,9 @@ def bootstrap(): sys.exit(-1) target.remove(support_path) - import shiboken6 as root - path = Path(root.__file__) - rp = path.parent.resolve() - # This can be the shiboken6 directory or the binary module, so search. - look_for = Path("files.dir") / "shibokensupport" / "signature" / "loader.py" - while not (rp / look_for).exists(): - dir = rp.parent - if dir == rp: # Hit root, '/', 'C:\', '\\server\share' - break - rp = dir - - # Here we decide if we work embedded or not. - embedding_var = "pyside_uses_embedding" - use_embedding = bool(getattr(sys, embedding_var, False)) - loader_path = rp / look_for - files_dir = loader_path.parents[2] - assert files_dir.name == "files.dir" - - if not loader_path.exists(): - use_embedding = True - setattr(sys, embedding_var, use_embedding) - - if use_embedding: - target, support_path = prepare_zipfile() - else: - target, support_path = sys.path, os.fspath(files_dir) - - try: - with ensure_shibokensupport(target, support_path): - from shibokensupport.signature import loader - except Exception as e: - print('Exception:', e) - traceback.print_exc(file=sys.stdout) - + target, support_path = prepare_zipfile() + with ensure_shibokensupport(target, support_path): + from shibokensupport.signature import loader return loader diff --git a/sources/shiboken6/shibokenmodule/CMakeLists.txt b/sources/shiboken6/shibokenmodule/CMakeLists.txt index 0431ba6f2..db0e45cc5 100644 --- a/sources/shiboken6/shibokenmodule/CMakeLists.txt +++ b/sources/shiboken6/shibokenmodule/CMakeLists.txt @@ -49,15 +49,6 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Shiboken.pyi" install(FILES "${CMAKE_CURRENT_BINARY_DIR}/../Shiboken.pyi" DESTINATION "${PYTHON_SITE_PACKAGES}/shiboken6") -# Variable from enclosing scope. -foreach(item IN LISTS shiboken_python_files) - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/files.dir/shibokensupport/${item}" - "${CMAKE_CURRENT_BINARY_DIR}/files.dir/shibokensupport/${item}" COPYONLY) -endforeach() - -install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/files.dir" - DESTINATION "${PYTHON_SITE_PACKAGES}/shiboken6") - # PYSIDE-1497: This `..` is the crucial trick to unify the path location of `Shiboken`. install(FILES "${CMAKE_CURRENT_BINARY_DIR}/../__init__.py" DESTINATION "${PYTHON_SITE_PACKAGES}/shiboken6") |