В Python, если вы хотите динамически импортировать модуль (например, из имени строки), вы можете использовать модуль importlib
и функцию importlib.import_module("foo")
, которая по сути дает тот же результат, что и import foo
(но этодинамически).
В любом случае, в моей программе я использую функцию для импорта модуля из списка, поэтому она выглядит примерно так:
# Note: this code does not produce the desired result.
# Please see the snippet below, for the working version
module_list = ["os"]
def import_module(name):
exec("global {}".format(name))
exec("import {}".format(name))
for item in module_list:
import_module(item)
Я не виделэтот тип решения где-либо еще в Интернете.То, что я спрашиваю, почему?Это плохая практика, потому что я использую функцию exec()
(как я читал, чтобы не делать бесчисленное количество раз), или это потому, что это просто более запутанно
Редактировать: я чувствую, что это актуальноотметить, что это не мой точный код выше, но это часть, которая на самом деле имеет отношение к этому вопросу, вместо того, чтобы сбивать с толку людей
Edit (2): спасибо пользователю Aran-Fey за открытиечто мой код не работает.Я не проверил должным образом этот конкретный фрагмент.Вот версия, которая работает в Python 3.6:
module_list = ["os"]
def import_module(name):
exec("global {}".format(name), globals())
exec("import {}".format(name), globals())
for item in module_list:
import_module(item)