动态加载自定义模块

时间:2019-02-24 18:27:35

标签: python pygame

我在python中有一个简单的应用程序可以用于视觉效果(pygame)。 我想在此应用程序中加载我的自定义模块。每个模块都有自定义vfx。

应用程序结构:

app:
|
-main.py
-config.py
-modules
  |
  -01
    |
    -module.py
    -assets
  -02
    |
    -module.py
    -assets
  -XX
    |
    -module.py
    -assets

在module.py中,我有:

    #import libs

def loadModules():
    dir = []
    list = os.listdir("modules")
    for d in list:
        path = os.path.abspath("modules") + os.sep + d
        if os.path.isdir(path) and os.path.exists(path + os.sep + "module.py"):
            dir.append(path + os.sep + "module.py")
    return dir
#init pygame & create scene
i = 0
while true
    #scene()
    sys.path.append(loadModules()[0])
    mod = importlib.import_module("module", __name__)
    mod.draw(scene)
    #print(plugin)
    sys.path.remove(plugin)

    if(i > 10):
         sys.path.append(loadPlugins()[1])
         mod = importlib.import_module("module", __name__)
         mod.draw(scene)
         #print(plugin)
         sys.path.remove(plugin)

    i += 1

模块中的每个module.py我都有方法

  

draw()

创建视觉效果

如何加载动态的几个模块巫婆标准同名方法draw()? 在此解决方案中,仅加载第一个模块,不加载下一个目录02中的下一个模块。

2 个答案:

答案 0 :(得分:1)

# General rule for Folder1 RewriteCond %{REQUEST_URI} !^/Folder1/file(2|8)$ RewriteRule ... # Rule for Folder1/file2 and Folder1/file8 RewriteCond %{REQUEST_URI} ^/Folder1/file(2|8)$ RewriteRule ... 将始终返回loadModules()[0]的第一项,始终为dir

与其执行01而是遍历while True中的所有条目:

loadModules()

答案 1 :(得分:0)

好的,但是现在只加载一个模块,而不是全部。 我究竟做错了什么? Check this -> screen

编辑:

我找到了不赞成使用的解决方案:

for dir in loadModules():
    print(dir)
    imp.load_source('module', dir)
    import module
    module.draw()