카테고리 없음

[파이썬] 파이썬의 플러그인 관리자

행복을전해요 2020. 12. 21. 08:55

가장 기본적인 수준에서 무엇보다도 애플리케이션 용으로 작성된 모든 플러그인의 기반이되는 기본 플러그인 클래스를 제공하려고합니다.

다음으로 모두 가져와야합니다.

class PluginLoader():
    def __init__(self, path):
            self.path = path
            
                def __iter__(self):
                        for (dirpath, dirs, files) in os.walk(self.path):
                                    if not dirpath in sys.path:
                                                    sys.path.insert(0, dirpath)
                                                            for file in files:
                                                                            (name, ext) = os.path.splitext(file)
                                                                                            if ext == os.extsep + "py":
                                                                                                                __import__(name, None, None, [''])
                                                                                                                        for plugin in Plugin.__subclasses__():
                                                                                                                                    yield plugin
                                                                                                                                    

Python 2.7 또는 3.1+에서는 대신 다음을 __import__(name, None, None, [''])고려하십시오.

import importlib  # just once
importlib.import_module(name)

이것은 모든 플러그인 파일을로드하고 모든 플러그인을 제공합니다. 그런 다음 적합하다고 판단되는 플러그인을 선택한 다음 사용합니다.

from multiprocessing import Process, Pipe

plugins = {}

for plugin in PluginLoader("plugins"):
    ... #select plugin(s)
        if selected:
                plugins[plugin.__name__], child = Pipe()
                        p = Process(target=plugin, args=(child,))
                                p.start()
                                
                                ...
                                
                                for plugin in plugins.values():
                                    plugin.put("EventHappened")
                                    
                                    ...
                                    
                                    for plugin in plugins.values():
                                        event = plugin.get(False)
                                            if event:
                                                   ... #handle event
                                                   

이것은 처음에 떠오르는 것입니다. 분명히 육체를 위해서는 훨씬 더 많은 것이 필요하지만, 작업하기에 좋은 기초가되어야합니다.

-------------------

yapsy플러그인 https://github.com/tibonihoo/yapsy를 확인 하십시오 . 이것은 당신을 위해 작동합니다



출처
https://stackoverflow.com/questions/7417997