看看我的目录结构
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模块加载目录中的所有文件,但这对我来说似乎不合理。
答案 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'))
我还有一个问题吗?为什么你需要这样做? 如果你看一下工厂设计模式,我认为会更好。