Plugins

link: https://packaging.python.org/en/latest/guides/creating-and-discovering-plugins/

В Python есть три способа организовать поддержку плагинов (подробнее про каждый в статье выше)

  • Используя соглашение об имени для плагинов (так например flask делает)

  • Используя namespace'ы

  • Используя блок метаданных в pyproject.toml

Используя блок метаданных в pyproject.toml

Объявляем entry point в pyproject.toml (это просто указание, что нужно импортировать, чтобы подключить плагин), например, для hatchling:

[project.entry-points.'playground.plugins']
myplugin = "playground.core.plugins.myplugin"

где: myplugin — название плагина playground.plugins — название группы плагинов playground.core.plugins.myplugin — тот python-пакет, который реализует логику плагина (если бы мы подключали его сами, то писали бы import playground.core.plugins.myplugin)

В python (>=3.10) подключаем плагин следующим образом:

from importlib.metadata import entry_points

"""
# если бы не было плагина, а мы подключали бы код напрямую:

from playground.core.plugins.myplugin import start

start()
"""

# Option 1: Load a plugin
(myplugin,) = entry_points(group='playground.plugins', name='myplugin')
module = myplugin.load()
module.start()

# Option 2: Load plugins
discovered_plugins = entry_points(group='playground.plugins')
for plugin in plugins:
    module = plugin.load()
    module.start()

Last updated