我想制作类似于插件系统的东西,但却无法使其正常工作。具体来说,我有一些要求。
我有主脚本谁应该在./plugins目录中搜索其他python脚本并加载它们。
此主脚本使用globals()
如果我将这些类放在同一个主文件中,它的效果非常好,但我无法按照自己的意愿使用它。
是否可以在Python中执行此操作?
我试着做一些这样的事情:
source:plugins / test.py
class SomeClass(Base):
def __init__(self):
self.name = "Name of plugin"
主脚本只需在此类上执行一些方法。
答案 0 :(得分:0)
您可以动态导入python文件或使用exec
语句(确保定义要执行的上下文,否则将使用您使用该语句的上下文)。然后使用Base.__subclasses__
,假设Base
是新式类,或者从导入的插件模块调用函数。在后一种情况下,您必须提供插件注册机制。
答案 1 :(得分:0)
使用http://docs.python.org/2/library/imp.html#imp.load_module
对于py3我认为有importlib,但我不知道如何随意使用那个。
答案 2 :(得分:0)