Python ImportLib «Нет имени модуля»

Я пытаюсь использовать переменную в качестве модуля для импорта в Python.

Используя ImportLib, мне удалось найти тест...

sys.path.insert(0, sys.path[0] + '\\tests')
tool_name = selected_tool.split(".")[0]
selected_module = importlib.import_module("script1")
print(selected_module)

... и, напечатав select_module, я вижу, что он успешно находит скрипт:

<module 'script1' from 'C:\\Users\\.....">

Однако, когда я пытаюсь использовать эту переменную в коде, чтобы импортировать из нее модуль:

from selected_module import run
run(1337)

Программа завершает работу со следующей ошибкой:

ImportError: No module named 'selected_module'

Я попытался добавить файл init.py в основной каталог и каталог /test, где находятся сценарии, но безрезультатно. Я уверен, что это просто что-то глупо маленькое, чего мне не хватает - кто-нибудь знает?


person Dark Knight    schedule 27.06.2016    source источник


Ответы (1)


Операторы импорта не чувствительны к переменным! Их содержимое обрабатывается как литералы

Пример:

urllib = "foo"
from urllib import parse   # loads "urllib.parse", not "foo.parse"
print(parse)

Обратите внимание, что from my_module import my_func просто привяжет my_module.my_func к локальному имени my_func. Если вы уже импортировали модуль через importlib.import_module, вы можете просто сделать это самостоятельно:

# ... your code here
run = selected_module.run  # bind module function to local name
person MisterMiyagi    schedule 27.06.2016
comment
Фантастика, большое спасибо за помощь! Это сработало отлично, когда я вместо from import просто сделал selected_module.run. - person Dark Knight; 27.06.2016