Как переписать код, используя imp для importlib - PullRequest
0 голосов
/ 11 октября 2018

Я (упростил) этот фрагмент кода с использованием библиотеки imp:

fp, pathname, description = imp.find_module(site_init_modname, [site_dir])
m = sys.modules['SCons.Script']
sfx = description[0]
modname = os.path.basename(pathname)[:-len(sfx)]
site_m = {"__file__": pathname,
          "__name__": modname,
          "__doc__": None}
re_special = re.compile("__[^_]+__")
for k in list(m.__dict__.keys()):
    if not re_special.match(k):
        site_m[k] = m.__dict__[k]
exec(compile(fp.read(), fp.name, 'exec'), site_m)

Поскольку библиотека imp устарела устарела , я хотел бы переписать этот фрагменткод с использованием importlib.Я попробовал что-то вроде этого:

spec = importlib.util.spec_from_file_location(site_init_modname, site_init_file)
m = sys.modules['SCons.Script']
mod = importlib.util.module_from_spec(spec)
mod.loader.exec_module(mod)

Но это, очевидно, неправильно, потому что exec_module должно быть сделано в пространстве имен SCons.Script.Есть идеи как правильно это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...