Python Динамический импорт функций из подкаталога - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь динамически импортировать функции из модуля на основе параметра, но не могу понять это. У меня есть функция-обработчик, затем подкаталог, заполненный файлами, каждый из которых содержит одну функцию, которую я хочу использовать. Я использую import_module из importlib, но это не решило мою проблему.

Моя файловая структура:

handler.py
functions
--__init__.py
--square.py

Вот мой импортированный модуль (square.py):

def sq(param):
  return param*param

Вот мой код обработчика:

from importlib import import_module

def main(fun):
  file = import_module(fun)
  result = fun.sq(4)
  print(result)

И я называю свой обработчик как: main("functions.square")

Я хочу назвать свой обработчик как : main("functions.square.sq") чтобы моя основная функция выглядела так:

from importlib import import_module

def main(fun):
  file = import_module(fun)
  result = fun(4)
  print(result)

Есть идеи, как это сделать?

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Для тех, кто смотрит на это, я делал это через AWS лямбду, что вызывало дополнительные проблемы. Я исправил это так:

from importlib import import_module

def main(fun):
  result = return import_module("src.main.functions." + fun).run(4)
  print(result)

Моя файловая структура выглядит так:

project
--| lambdas
----| src
------| main
--------| handler.py
--------| functions
----------| __init__.py
----------| square.py
0 голосов
/ 27 апреля 2020

Я нашел обходной путь, назвав основную функцию всех подфайлов (например, квадратов) одинаковыми, назвав их все run(). Поэтому я мог бы назвать их динамически, как это:

from importlib import import_module

def main(fun):
  result = import_module(fun).run(4)
  print(result)
...