将目录中的所有模块导入数组

时间:2017-12-13 05:16:19

标签: python

看看我的目录结构

exchange.py
exchanges/
    kraken.py
    gemini.py
    bitfinex.py

现在在exchange.py我想动态加载来自交换文件夹的所有模块,以便我可以迭代它们并以编程方式实例化这些类。伪代码:

exchanges = load_modules('exchanges')
for module in exchanges:
   config = module.CONFIG # a global
   for class in module:
        loaded_classes.append(module.class) # add each class in each module to a list

目标是允许任何贡献者创建一个继承自exchange.py的类,将其放入exchanges文件夹,应用程序将自动加载它及其配置。

我见过this answer使用os模块加载目录中的所有文件,但这对我来说似乎不合理。

2 个答案:

答案 0 :(得分:0)

__init__.py添加到exchanges文件夹,使其成为python包

import sys
sys.path(path_to_modules_directory)

通过这样做,您可以使用这种方式导入所有模块

from exchanges import *

答案 1 :(得分:0)

您可以使用函数__import__或模块importlib执行任务。 首次使用时应扫描目录中的python文件。导入后使用__import__importlib。更好地使用importlib

实施例

import os
import sys

def import_libs(path):
    sys.path.append(path)
    return [__import__(os.path.join(path, module)) for module in filter(lambda x: x and x[-3:] == ".py", os.listdir("./modules/calculate/calculate"))]

print(import_libs('exchanges'))

我还有一个问题吗?为什么你需要这样做? 如果你看一下工厂设计模式,我认为会更好。

相关问题