Python 无法使用动态导入的模块

Python 无法使用动态导入的模块,python,python-3.x,dynamic,import,module,Python,Python 3.x,Dynamic,Import,Module,我正在从子目录中动态导入不是\uuu init\uuu.py或我的skeleton.py文件的任何.py模块。我首先构建一个列表,如下所示(省略(.py): my_mods是子目录,frst_mod.py和sncd_mod.py是可用的模块。我导入的所有模块都包含类操作,并且它始终提供相同的三个函数。然后我使用importlib导入它们 import importlib imports = {} for i in mods_in_dir: imports[i] = importlib.

我正在从子目录中动态导入不是
\uuu init\uuu.py
或我的
skeleton.py
文件的任何.py模块。我首先构建一个列表,如下所示(省略(.py):

my_mods是子目录,frst_mod.py和sncd_mod.py是可用的模块。我导入的所有模块都包含
类操作
,并且它始终提供相同的三个函数。然后我使用importlib导入它们

import importlib

imports = {}

for i in mods_in_dir:
   imports[i] = importlib.import_module(i)
当我通过
print(sys.modules.keys())
检查时,它们显示为
[…],'my_mods.frst_mod','my_mods.scnd_mod',[…]

出于测试原因,我在每个模块中定义了一个函数:

def return_some_string():
    return "some string"
但是我不能调用这个函数。想到什么我都试过了。。e、 g.
打印(我的第一个修改操作。返回一些字符串())
打印(第一个修改操作。返回一些字符串())

两者都会导致
name错误:未定义名称“my_mods”
name错误:未定义名称“frst_mod”

编辑: 已解决。

@m170897017在我最初的尝试中帮助我解决了这个问题。 我没有注意到我在
imports
dict中有模块,所以没有使用它


打印(导入['my_mods.frst_mod'].ModsClassName.return_some_string())
现在成功打印
some_string
将动态导入更改为这种方式,然后重试:

...
mods_in_dir = ['my_mods.frst_mod','my_mods.scnd_mod']
modules = list(map(__import__, mods_in_dir))
# if you want to invoke func1 in my_mods.frst_mod and get result from it
result1 = modules[0].func1()
# if you want to invoke func2 in my_mods.scnd_mod and get result from it
result2 = modules[1].func2()
...

我只是按照您的建议尝试了一下,但我仍然无法使用该函数,另外还有
sys.modules.keys()
中甚至没有提到的模块。。编辑:在执行
map
命令之后,我确实得到了
。@DaedalusMythos错误消息是什么?同样的?是的,我也有同样的错误<代码>名称“..”未定义@DaedalusMythos调用函数的方式不正确。检查我的最新情况。让我们来看看。
...
mods_in_dir = ['my_mods.frst_mod','my_mods.scnd_mod']
modules = list(map(__import__, mods_in_dir))
# if you want to invoke func1 in my_mods.frst_mod and get result from it
result1 = modules[0].func1()
# if you want to invoke func2 in my_mods.scnd_mod and get result from it
result2 = modules[1].func2()
...