Импортировать модули динамически - PullRequest
0 голосов
/ 06 ноября 2018

Я прочитал этот связанный вопрос , но я не смог применить ни один из приведенных ответов.

У меня есть несколько тестовых сценариев, все из которых используют одну и ту же функцию, реализованную в общем файле.

Общий файл начинается со следующих import операторов:

from Class1       import          Class1
from Class2       import Type1 as Class2
from Class3       import Type1 as Class3
from Class4       import          Class4
from Class5.Type1 import          Class5
from Class6.Type1 import          Class6

Я хотел бы иметь возможность изменить Type1 для некоторых тестовых сценариев.

В настоящее время я просто извлекаю соответствующие утверждения из общего файла и помещаю их в каждый из тестовых файлов с типом, который необходимо проверить.

Но я ищу «более приятный» способ, например, передать строку, которая представляет тип, и импортировать динамически в соответствии с этой входной строкой.

Это позволило бы мне свести к минимуму сценарии тестирования.

Полагаю, мне, возможно, понадобится поместить оператор import в функцию, вызываемую тестовыми сценариями, но я в порядке.

Как именно я могу этого достичь?

Я не пробовал печально известную eval, потому что:

  1. это зло
  2. Я почти уверен, что он не работает для выражений "не только для чтения"

Любые идеи будут очень признательны.

Спасибо!

1 Ответ

0 голосов
/ 06 ноября 2018

Вы можете использовать встроенный importlib модуль

import importlib

type_str = function_that_determines_this_val()
module = importlib.import_module(module)
obj = getattr(module, type_str)

Не уверен, что это именно то, что вы ищете, но importlib, вероятно, то, что вы ищете.

...