动态加载python模块

问题描述:

我在文件夹中有一些python模块。动态加载python模块

  1. 我想读文件夹内容
  2. 动态导入每个导入模块内的每个模块
  3. 动态加载的名称的方法“的run()”

如何做到这一点?

+1

这听起来不是一个好主意。你想做什么? – 2014-08-30 20:26:05

+0

@PatrickCollins如果我看到这个问题,我会这么想。太复杂的解释,但在我的问题的背景下,这是一个很好的解决方案。 – Boz 2014-08-30 20:49:50

1)

import glob 
module_files = glob.glob("*.py") #return a list of all names in folder ending '.py' 

2)

modules = [__import__(module) for module in module_files] 

3)我没有正确的理解这个问题,但我想,你应该使用gettattr:gettattr(module, 'attribute')相同module.attribute

__import__ docstring表示优先使用importlib.import_module()而不是它。

+0

这是否适用于当前文件夹内的文件夹中的包? – IanAuld 2014-08-30 21:42:54

+0

这就是我一直在寻找的。 – Boz 2014-08-30 21:48:30

+0

@IanAuld当然你可以使用'glob.glob(“folder_name/*。py”)'。要获取文件夹列表,请使用'[如果os.path.isdir(name)]或'filter(os.path.isdir,glob.glob('*')),则使用'[glob.glob中名称的名称(“*”)) ' – 2014-08-31 07:27:18