Improve python helper modules declaration in SConstruct for compatibility with Python 3.6 and import against helper modules's parent path

This commit is contained in:
Emmanuel Leblond 2022-01-13 21:50:56 +01:00
parent 99b46a2615
commit 9b781d24c0
No known key found for this signature in database
GPG Key ID: C360860E645EFFC0
1 changed files with 16 additions and 0 deletions

View File

@ -10,6 +10,7 @@ import os
import pickle import pickle
import sys import sys
import time import time
from types import ModuleType
from collections import OrderedDict from collections import OrderedDict
from importlib.util import spec_from_file_location, module_from_spec from importlib.util import spec_from_file_location, module_from_spec
@ -24,6 +25,21 @@ def _helper_module(name, path):
module = module_from_spec(spec) module = module_from_spec(spec)
spec.loader.exec_module(module) spec.loader.exec_module(module)
sys.modules[name] = module sys.modules[name] = module
# Ensure the module's parents are in loaded to avoid loading the wrong parent
# when doing "import foo.bar" while only "foo.bar" as declared as helper module
child_module = module
parent_name = name
while True:
try:
parent_name, child_name = parent_name.rsplit(".", 1)
except ValueError:
break
try:
parent_module = sys.modules[parent_name]
except KeyError:
parent_module = ModuleType(parent_name)
sys.modules[parent_name] = parent_module
setattr(parent_module, child_name, child_module)
_helper_module("gles3_builders", "gles3_builders.py") _helper_module("gles3_builders", "gles3_builders.py")