看看我的目录结构
exchange.py
exchanges/
kraken.py
gemini.py
bitfinex.py现在,在exchange.py中,我希望动态地从exchanges文件夹加载所有模块,以便可以迭代它们并以编程方式实例化类。伪码:
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模块加载目录中的所有文件,但对我来说,这似乎是不合理的。
发布于 2017-12-13 05:27:51
将__init__.py添加到exchanges文件夹中,使其成为python包
import sys
sys.path(path_to_modules_directory)通过这样做,您可以使用这种方式导入所有模块。
from exchanges import *发布于 2017-12-13 05:32:53
您可以在任务中使用函数__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'))我还有一个问题?你为什么要这么做?如果你看一下工厂的设计模式,我想会更好。
https://stackoverflow.com/questions/47785950
复制相似问题