mirror of
https://github.com/opencv/opencv.git
synced 2026-07-21 19:33:03 +04:00
Fix Python bindings when optional modules like gapi are disabled
Fix two issues that cause `import cv2` to fail when building with -DBUILD_opencv_gapi=OFF: 1. In `has_all_required_modules()`, the function parameter `type_node` was ignored in favor of the enclosing scope's loop variable `node`. This works by accident when called as `has_all_required_modules(node)` but is incorrect — the parameter should be used directly. 2. In `__load_extra_py_code_for_module()`, only `ImportError` was caught. When a stale gapi submodule directory exists from a previous build, gapi/__init__.py raises `AttributeError` (not `ImportError`) because it tries to access C++ bindings that don't exist. Now catches both exception types for defense-in-depth. Refs: #26098
This commit is contained in:
@@ -26,7 +26,7 @@ def __load_extra_py_code_for_module(base, name, enable_debug_print=False):
|
||||
native_module = sys.modules.pop(module_name, None)
|
||||
try:
|
||||
py_module = importlib.import_module(module_name)
|
||||
except ImportError as err:
|
||||
except (ImportError, AttributeError) as err:
|
||||
if enable_debug_print:
|
||||
print("Can't load Python code for module:", module_name,
|
||||
". Reason:", err)
|
||||
|
||||
@@ -708,7 +708,7 @@ def _generate_typing_module(root: NamespaceNode, output_path: Path) -> None:
|
||||
"""
|
||||
|
||||
def has_all_required_modules(type_node: TypeNode) -> bool:
|
||||
return all(em in root.namespaces for em in node.required_modules)
|
||||
return all(em in root.namespaces for em in type_node.required_modules)
|
||||
|
||||
def register_alias_links_from_aggregated_type(type_node: TypeNode) -> None:
|
||||
assert isinstance(type_node, AggregatedTypeNode), \
|
||||
|
||||
Reference in New Issue
Block a user