aboutsummaryrefslogtreecommitdiffstats
path: root/sources
diff options
context:
space:
mode:
authorChristian Tismer <tismer@stackless.com>2021-03-21 13:08:07 +0100
committerChristian Tismer <tismer@stackless.com>2021-03-25 10:31:25 +0100
commitbecf20de7cda9a98801e109f542aab4ac9fa96ad (patch)
tree7dacb247b05ca96507b63b05614aa9dd755635c9 /sources
parent12520af904a08d73d2a71965ae1506d3f7aa862d (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>
Diffstat (limited to 'sources')
-rw-r--r--sources/shiboken6/shibokenmodule/CMakeLists.txt4
-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.py29
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