Зачем использовать importlib вместо exec import - PullRequest
0 голосов
/ 10 июня 2018

В 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)
...