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