diff options
author | Christian Tismer <tismer@stackless.com> | 2021-03-21 13:08:07 +0100 |
---|---|---|
committer | Christian Tismer <tismer@stackless.com> | 2021-03-25 10:31:25 +0100 |
commit | becf20de7cda9a98801e109f542aab4ac9fa96ad (patch) | |
tree | 7dacb247b05ca96507b63b05614aa9dd755635c9 | |
parent | 12520af904a08d73d2a71965ae1506d3f7aa862d (diff) |
PySide import: Make imports more safe against installation errors
This patch originally was
"__feature__: Make imports more safe against installation errors"
After applying the patch to 5.15 with errors, it became clear that
not __feature__ was a problem, but the "import PySideX.support"
did not work in the embedding case.
This observation made the error message concerning PyInstaller
pointless. Instead, the pseudo-import of PySideX.support was fixed
to work correctly in all cases.
Tested on 5.15 with PyInstaller, this is now going back into dev.
Manually cherry-picked to 6.0
Pick-to: 5.15
Task-number: PYSIDE-1502
Change-Id: I2fd680a6a28de00f5392147b0d050deb7663dc22
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
-rw-r--r-- | sources/shiboken6/shibokenmodule/CMakeLists.txt | 4 | ||||
-rw-r--r-- | sources/shiboken6/shibokenmodule/files.dir/shibokensupport/feature.py (renamed from sources/shiboken6/shibokenmodule/files.dir/shibokensupport/__feature__.py) | 0 | ||||
-rw-r--r-- | sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/loader.py | 29 |
3 files changed, 18 insertions, 15 deletions
diff --git a/sources/shiboken6/shibokenmodule/CMakeLists.txt b/sources/shiboken6/shibokenmodule/CMakeLists.txt index eb8412462..9ec90e46f 100644 --- a/sources/shiboken6/shibokenmodule/CMakeLists.txt +++ b/sources/shiboken6/shibokenmodule/CMakeLists.txt @@ -42,8 +42,8 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/_config.py" configure_file("${CMAKE_CURRENT_SOURCE_DIR}/__init__.py.in" "${CMAKE_CURRENT_BINARY_DIR}/__init__.py" @ONLY) -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/files.dir/shibokensupport/__feature__.py" - "${CMAKE_CURRENT_BINARY_DIR}/files.dir/shibokensupport/__feature__.py" COPYONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/files.dir/shibokensupport/feature.py" + "${CMAKE_CURRENT_BINARY_DIR}/files.dir/shibokensupport/feature.py" COPYONLY) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/files.dir/shibokensupport/__init__.py" "${CMAKE_CURRENT_BINARY_DIR}/files.dir/shibokensupport/__init__.py" COPYONLY) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/files.dir/shibokensupport/signature/__init__.py" diff --git a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/__feature__.py b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/feature.py index 0fa58d22f..0fa58d22f 100644 --- a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/__feature__.py +++ b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/feature.py diff --git a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/loader.py b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/loader.py index e685da166..698ad4c75 100644 --- a/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/loader.py +++ b/sources/shiboken6/shibokenmodule/files.dir/shibokensupport/signature/loader.py @@ -112,7 +112,7 @@ def finish_import(module): import signature_bootstrap -from shibokensupport import signature, __feature__ +from shibokensupport import signature, feature as __feature__ signature.get_signature = signature_bootstrap.get_signature # PYSIDE-1019: Publish the __feature__ dictionary. __feature__.pyside_feature_dict = signature_bootstrap.pyside_feature_dict @@ -175,8 +175,9 @@ def move_into_pyside_package(): try: import PySide6.support except ModuleNotFoundError: - PySide6.support = types.ModuleType("PySide6.support") - put_into_package(PySide6.support, __feature__) + # This can happen in the embedding case. + put_into_package(PySide6, shibokensupport, "support") + put_into_package(PySide6.support, __feature__, "__feature__") put_into_package(PySide6.support, signature) put_into_package(PySide6.support.signature, mapping) put_into_package(PySide6.support.signature, errorhandler) @@ -198,18 +199,20 @@ from shibokensupport.signature import importhandler from shibokensupport.signature.lib import enum_sig if "PySide6" in sys.modules: - # We publish everything under "PySide6.support.signature", again. + # We publish everything under "PySide6.support", again. move_into_pyside_package() + # PYSIDE-1502: Make sure that support can be imported. + try: + import PySide6.support + except ModuleNotFoundError as e: + print("PySide6.support could not be imported. " + "This is a serious configuration error.", file=sys.stderr) + raise # PYSIDE-1019: Modify `__import__` to be `__feature__` aware. # __feature__ is already in sys.modules, so this is actually no import - try: - import PySide6.support.__feature__ - sys.modules["__feature__"] = PySide6.support.__feature__ - PySide6.support.__feature__.original_import = __builtins__["__import__"] - __builtins__["__import__"] = PySide6.support.__feature__._import - # Maybe we should optimize that and change `__import__` from C, instead? - except ModuleNotFoundError: - print("__feature__ could not be imported. " - "This is an unsolved PyInstaller problem.", file=sys.stderr) + import PySide6.support.__feature__ + sys.modules["__feature__"] = PySide6.support.__feature__ + PySide6.support.__feature__.original_import = __builtins__["__import__"] + __builtins__["__import__"] = PySide6.support.__feature__._import # end of file |