【发布时间】:2014-12-17 15:08:53
【问题描述】:
我正在从子目录中动态导入不是__init__.py 或我的skeleton.py 文件的任何.py 模块。我首先建立了一个列表,看起来像(.py 被省略):
mods_in_dir = ['my_mods.frst_mod','my_mods.scnd_mod']
my_mods 是子目录,frst_mod.py 和 sncd_mod.py 是可用的模块。我导入的所有模块都包含class Operation,它始终提供相同的三个功能。然后我使用 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"
但我无法调用此函数。我已经尝试了所有想到的东西......例如print(my_mods.frst_mod.Operation.return_some_string()) 或 print(frst_mod.Operation.return_some_string())
两者都导致NameError: name 'my_mods' is not defined 或NameError: name 'frst_mod' is not defined
编辑: 已解决。
@m170897017 在我最初的尝试中帮助我解决了这个问题。
我错过了我在 imports dict 中有模块并且没有使用它。
print(imports['my_mods.frst_mod'].ModsClassName.return_some_string()) 现在可以成功打印some_string
【问题讨论】:
标签: python python-3.x dynamic import module