#python #import
Вопрос:
Моя цель состоит в том, чтобы иметь функцию со списком строк в качестве входных данных и импортировать те модули, которые я хочу для своего кода.
Пример:
list_of_modules = ['module1', 'module2']
def importer(list_of_modules):
for module in list_of_modules:
if module == 'module1':
from package.package2.module1 import function1
if module == 'module2':
from package.package2.module2 import function1
if module == 'module3':
from package.package2.module3 import function1
Я попробовал это решение, и кажется, что модули не импортируются. Я также пытался использовать встроенную функцию импорта, но ничего.
Мой реальный пример был:
def importer(modules):
for value in modules:
if value == "ble_connection":
from top_app.module.connection.test_connectivity import connection1
if value == "switch_connection":
from top_app.module.connection.test_connectivity import connection2
Я должен добавить, что я использую pytest для запуска тестов из общего файла conftest, и этот вызывает эту функцию импорта во время крючка pytest_configure, который находится сразу после крючка обнаружения.
У вас есть какое-нибудь решение для этого?
Спасибо
Комментарии:
1. Это должно сработать, хотя эта функция 1 будет перезаписана.
2. В качестве альтернативы вы можете использовать
importlib
модуль.3. Можете ли вы добавить свою попытку использования
__import__
?4. Как вы проверили, что это не работает? Пожалуйста, покажите нам свой тестовый код. Например,
print(function1)
будет достаточно строки после цикла for.5. Я пробовал импортировать , но, похоже, ничего не импортируется
Ответ №1:
Я бы использовал exec
для этой цели:
list_of_modules = ['module1', 'module2']
for module in list_of_modules:
exec('package.package2.{} import function1'.format(module))
но, как кто-то прокомментировал вашу операцию, function1
это будет перезаписано.
Комментарии:
1. Спасибо за ответ. В конце концов я использовал крючок pytest_collection_modifyitems из pytest. Это работает довольно хорошо. Хотя это просто позволяет вам деактивировать некоторые тестовые функции, но пакеты все равно импортируются.