首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将目录中的所有模块导入数组

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

Stack Overflow用户
提问于 2017-12-13 05:16:19
回答 2查看 943关注 0票数 0

看看我的目录结构

代码语言:javascript
复制
exchange.py
exchanges/
    kraken.py
    gemini.py
    bitfinex.py

现在,在exchange.py中,我希望动态地从exchanges文件夹加载所有模块,以便可以迭代它们并以编程方式实例化类。伪码:

代码语言:javascript
复制
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模块加载目录中的所有文件,但对我来说,这似乎是不合理的。

EN

回答 2

Stack Overflow用户

发布于 2017-12-13 05:27:51

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

代码语言:javascript
复制
import sys
sys.path(path_to_modules_directory)

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

代码语言:javascript
复制
from exchanges import *
票数 0
EN

Stack Overflow用户

发布于 2017-12-13 05:32:53

您可以在任务中使用函数__import__或模块importlib。对于第一次使用,应该扫描目录中的python文件。导入后,使用__import__importlib。最好使用importlib

示例

代码语言:javascript
复制
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'))

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47785950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档