Doplnky

Doplnky vám umožňujú rozšíriť funkcie Blenderu použitím jazyka Python. Väčšinou môžete získať doplnky ako súčasť rozšírenia systému.

Tip

Ak sa doplnok po povolení neaktivuje, skontrolujte v okne konzoly, či sa nevyskytli nejaké chyby.

Prístup k internetu

Ak doplnok potrebuje používať internet, musí skontrolovať vlastnosť (len na čítanie) bpy.app.online_access. Táto možnosť je kontrolovaná v Predvoľbách, ktoré je možné prepísať cez príkazový riadok (--offline-mode / --online-mode).

Pre lepšie chybové hlásenia môžete skontrolovať aj bpy.app.online_access_overriden, aby ste zistili, či môžu užívatelia povoliť Online prístup v predvoľbách, alebo nie.

Poznámka

Doplnky, ktoré sa riadia týmto nastavením, sa budú pripájať k internetu len vtedy, ak je to povolené. Blender však nemôže zabrániť tomu, aby doplnky tretích strán toto pravidlo porušovali.

Závislosti balíkov

Aby mohli byť doplnky zaradené do balíka ako rozšírenia, musia byť samostatné. To znamená, že musia byť dodávané so všetkými svojimi závislosťami. Najmä moduly Pythonu tretích strán.

Existuje niekoľko možností:

Balík s Python Wheels.

Toto je odporúčaný spôsob spájania závislostí.

Ostatné doplnky môžete spájať do balíkov.

Toto sa odporúča, ak doplnok závisí od iného doplnku.

Uistite sa, že individuálny aj kombinovaný doplnok kontroluje už zaregistrované typy (operátory, panely, …). Tým sa zabráni duplicite operátorov a panelov v rozhraní, ak sú doplnky nainštalované ako balík a jednotlivo.

Balík pri predaji

Toto sa dá použiť ako spôsob, ako zbaliť čisto závislosť Pythonu ako pod-modul.

Výhodou je, že sa vyhnete konfliktom verzií, hoci si to vyžaduje určitú prácu s nastavením každého balíka.

Lokálne úložisko

Doplnky nesmú predpokladať, že do ich vlastného priečinka môže užívateľ zapisovať, pretože v prípade systémových úložísk to tak nemusí byť. Zápis súborov do priečinka doplnku má aj tú nevýhodu, že aktualizácia rozšírenia odstráni všetky súbory.

Doplnky, ktoré potrebujú vlastný užívateľský priečinok, by mali používať funkciu, ktorá je na tento účel k dispozícii:

extension_directory = bpy.utils.extension_path_user(__package__, path="", create=True)

Ak chcete vytvoriť pod-priečinky, môžete to urobiť pomocou argumentu path.

Tento priečinok sa uchováva medzi aktualizáciami, ale po odinštalovaní rozšírenia sa odstráni.

Zdedené doplnky verzus rozšírenia

So zavedením rozšírení v Blenderi 4.2 sa starší spôsob vytvárania doplnkov považuje za zastaraný. Hoci sú zmeny pomerne malé, majú vplyv na existujúce doplnky.

Aby bol proces prechodu hladký, Blender bude naďalej podporovať takzvané zdedené doplnky. Môžete ich nainštalovať pomocou tlačidla Inštalovať zdedený doplnok v užívateľských predvoľbách.

Všetkých udržiavateľov doplnkov vyzývame, aby konvertovali doplnky, ktoré chcú zdieľať, aby boli odolné voči budúcnosti a mohli podporovať funkcie, ako je aktualizácia z platformy rozšírení.

Konvertovanie staršieho doplnku na rozšírenie

  1. Vytvorte súbor manifestu.

  2. Odstráňte informáciu bl_info (tá je teraz v manifeste).

  3. Nahraďte všetky odkazy na názov modulu na __package__`.

  4. Zabezpečte, aby všetky importy modulov používali relatívny import.

  5. Na zabalenie externých závislostí Pythonu použite Wheels.

  6. Nezabudnite ho dôkladne otestovať.

Poznámka

Na testovanie je potrebné importovať inštaláciu rozšírenia z disku a skontrolovať, či všetko funguje správne. Takto sa čo najviac priblížite k finálnej podobe.

Rozšírenia a názvoslovie

Zdedené doplnky by na prístup k predvoľbám používali názov svojho modulu. To by mohlo viesť k stretu názvov, keď by sa nainštalovali rozšírenia s rovnakým názvom (z rôznych úložísk). Aby sa tomuto konfliktu zabránilo, názov úložiska je teraz súčasťou názvoslovia.

Napríklad namiesto kitsu bude teraz názov modulu bl_ext.{názov_modulu_úložiska}.kitsu.

To má niekoľko dôsledkov pre preferencie a import modulov.

Užívateľské predvoľby a __package__

Doplnky môžu definovať vlastné predvoľby, ktoré používajú názov balíka ako identifikátor. K tomu možno pristupovať použitím __package__`.

Táto funkcia bola podporovaná už v starších doplnkoch, ale nebola posilnená. Ako také to môže narušiť spätnú kompatibilitu.

Predtým:

class KitsuPreferences(bpy.types.AddonPreferences):
    bl_idname = "kitsu"
    # ... snip ...

# Access with:
addon_prefs = bpy.context.preferences.addons["kitsu"]

Teraz:

class KitsuPreferences(bpy.types.AddonPreferences):
    bl_idname = __package__
    # ... snip ...

# Access with:
addon_prefs = bpy.context.preferences.addons[__package__]
Pod-balíčky

Doplnok, ktorý definuje podbalíčky („podpriečinky“ s vlastným súborom __init__.py), ktoré potrebujú používať tento identifikátor, bude musieť importovať balík najvyššej úrovne použitím relatívneho importu.

from .. import __package__ as base_package

Potom sa namiesto __package__` môže použiť base_package. Import .. je relatívny voči rodičovskému balíku, pod-pod-balíčky musia používať ... a tak ďalej.

Poznámka

  • Hodnota __package__` sa v jednotlivých systémoch líši, preto by sa nikdy nemala nahrádzať doslovným reťazcom.

  • Rozšírenia nesmú manipulovať s hodnotou __package__`, pretože to môže spôsobiť neočakávané správanie alebo chyby.

Relatívne importy

predtým:

from kitsu import utils

teraz:

from . import utils

Import balíkov v rámci modulu doplnku musí používať relatívne cesty. Je to štandardná funkcia Pythonu a platí len pre doplnky, ktoré majú viacero priečinkov.

Táto funkcia bola podporovaná už v starších doplnkoch, ale nebola posilnená. Ako také to môže narušiť spätnú kompatibilitu.