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