Модуль importlib.reload из строки? - PullRequest
       11

Модуль importlib.reload из строки?

0 голосов
/ 02 сентября 2018

Я хочу использовать importlib для перезагрузки модуля, имя которого генерируется динамически.

Пример:

import sys

def some_func():
    return "sys"

want_reload = some_func()

Теперь, как мне перезагрузить модуль sys, используя переменную want_reload? Я не могу предоставить его напрямую importlib.reload(), потому что он говорит, что ожидает модуль, а не str.

Было бы лучше, если указана неверная строка или модуль, который не загружен, например, "........", что возникает исключение.

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Намекнув на ответ @ spinkus, я нашел решение:

Поскольку я не хочу загружать модуль, если он еще не загружен, я могу получить ссылку с sys.modules

want_reload = some_func()
try:
    want_reload_module = sys.modules[want_reload]
    importlib.reload(want_reload_module)
except KeyError:
    raise ImportError("Module {} not loaded. Can't reload".format(want_reload))
0 голосов
/ 02 сентября 2018

importlib.import_module() не перезагружается, но возвращает ссылку на модуль, даже если он уже загружен:

import sys
import importlib

def some_func():
    return "sys"

want_reload = some_func()
want_reload_module = importlib.import_module(want_reload)
importlib.reload(want_reload_module)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...