Минимальный механизм плагинов на Python


Есть ли лучший способ иметь минимальный механизм плагинов на Python, чем следующие?

(Это был вдохновлен этим постом.)

import sys
import pkgutil
import os.path
import plugins
pluginsPath = os.path.dirname(plugins.__file__)
pluginModules = [name for _, name, _ in pkgutil.iter_modules([pluginsPath])]
dictOfPlugins = {}
for plugin in pluginModules:
    thePluginModuleName = "plugins."+plugin
    result = __import__(thePluginModuleName)
    dictOfPlugins[plugin] = sys.modules[thePluginModuleName]

(Это предполагает, что все ваши плагины находятся в папке "plugins" и, таким образом, модули в пакете, и что, что каталог пустой файл __init__.py в нем.)

Если вы хотели поискать конкретный плагин, название будет ключевым в dictOfPlugins, и модуль сам объект будет значение. Предполагая, что вы знали, что интерфейс на Python модулей, будет, этот, казалось бы, чтобы сделать работу. Есть ли лучший способ сделать это?



764
11
задан 9 июня 2011 в 09:06 Источник Поделиться
Комментарии
1 ответ

Проверьте, как Django приложения работают:


  • Плагины являются подлинными пакеты Python, поэтому можно использовать стандартные инструменты для их установки

  • Плагины, которые на самом деле должны быть использованы в PYTHONPATH и перечисленных (только имя пакета) в конфигурации.

  • Есть скрипты для создания, тестирования, Плагины ...

  • Структура плагин расширяемый всеми возможными способами.

  • Плагины загружаются, когда они меняются в режиме развития.

Я не говорю, что вы должны использовать Джанго, если вы не делаете веб-разработки, но вы можете вдохновить вашу систему плагинов на нем.

6
ответ дан 8 сентября 2011 в 08:09 Источник Поделиться