Tillägg

Med tillägg kan du utöka Blenders funktionalitet med hjälp av Python. För det mesta kan du få tillägg som en del av Extensions-systemet.

Tips

Om tillägget inte aktiveras när det är aktiverat, kontrollera Konsolfönster för eventuella fel som kan ha uppstått.

Tillgång till internet

Om tillägget behöver använda internet måste det kontrollera egenskapen (skrivskyddad) bpy.app.online_access. Detta alternativ styrs av preferenser, som kan åsidosättas via kommandoraden (–offline-mode / –online-mode).

För bättre felmeddelanden kan du också kontrollera för bpy.app.online_access_overriden, för att avgöra om användare kan slå på Allow Online Access i inställningarna eller inte.

Observera

Tillägg som följer denna inställning kommer endast att ansluta till internet om det är aktiverat. Blender kan dock inte förhindra att tillägg från tredje part bryter mot denna regel.

Beroenden för paket

För att tillägg ska kunna paketeras som tillägg måste de vara fristående. Det betyder att de måste levereras med alla dess beroenden. I synnerhet Python-moduler från tredje part.

Det finns några alternativ för detta:

Paket med Python Wheels.

Detta är det rekommenderade sättet att paketera beroenden.

Samla andra tillägg tillsammans.

Detta rekommenderas om ett tillägg är beroende av ett annat tillägg.

Se till att både det enskilda och det kombinerade tillägget kontrollerar om det finns redan registrerade typer (Operatörer, Paneler, …). På så sätt undviks dubblering av operatörer och paneler i gränssnittet om tilläggsprogrammen installeras både som paket och individuellt.

Paket med Vendorize

Detta kan användas som ett sätt att paketera rena Python-beroenden som en undermodul.

Detta har fördelen att versionskonflikter undviks, även om det kräver en del arbete att konfigurera varje paket.

Lokalt filsystem

Tilläggsprogram får inte anta att deras egen katalog är skrivbar för användaren eftersom detta kanske inte är fallet för ”System”-arkiv. Att skriva filer till tilläggets katalog har också den nackdelen att alla filer tas bort när tillägget uppgraderas.

Tilläggsprogram som behöver en egen användarkatalog bör använda en verktygsfunktion som tillhandahålls för detta ändamål:

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

Om du vill skapa underkataloger kan du göra det med argumentet path.

Den här katalogen sparas mellan uppgraderingar men tas bort om tillägget avinstalleras.

Legacy vs Extension Tillägg

I och med introduktionen av Extensions i Blender 4.2 anses det gamla sättet att skapa tillägg vara föråldrat. Även om ändringarna är ganska små påverkar de befintliga tillägg.

För att möjliggöra en smidig övergångsprocess kommer de så kallade legacy-tilläggen att fortsätta att stödjas av Blender. De kan installeras via Install legacy Add-on-knappen i användarinställningarna.

Alla som underhåller tillägg uppmanas att konvertera de tillägg som de vill dela, så att de är framtidssäkra och kan stödja funktioner som uppdatering från tilläggsplattformen.

Konvertera ett äldre tillägg till ett tillägg

  1. Skapa en manifestfil.

  2. Ta bort informationen bl_info (den finns nu i manifestet).

  3. Ersätt alla referenser till modulnamnet med __package__.

  4. Gör så att all import av moduler använder relativ import.

  5. Använd wheels för att packa dina externa Python-beroenden.

  6. Kom ihåg att testa den noggrant.

Observera

För testning är det viktigt att installera tillägget från disken och kontrollera att allt fungerar som det ska. På så sätt kommer du så nära den slutliga upplevelsen som möjligt.

Tillägg och namnrymd

De äldre tilläggen skulle använda sitt modulnamn för att komma åt inställningarna. Detta kunde leda till en namnkonflikt när tillägg med samma namn (från olika arkiv) installerades. För att förhindra denna konflikt är arkivnamnet nu en del av namnrymden.

Till exempel, i stället för kitsu skulle modulnamnet vara bl_ext.{repository_module_name}.kitsu i stället.

Detta har några konsekvenser för preferenser och modulimport.

Användarinställningar och __package__

Tillägg kan definiera sina egna inställningar som använder paketnamnet som identifierare. Detta kan nås med hjälp av __package__.

Detta stöddes redan i de äldre tilläggen, men förstärktes inte. Därför kan detta bryta bakåtkompatibiliteten.

Före:

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

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

Nu:

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

# Access with:
addon_prefs = bpy.context.preferences.addons[__package__]
Underförpackningar

Ett tillägg som definierar underpaket (underkataloger med sin egen fil __init__.py) och som behöver använda den här identifieraren måste importera paketet på högsta nivån med en relativ import.

from .. import __package__ as base_package

Då kan base_package användas i stället för __package__. Importen .. är relativ till paketets förälder, under-sub-paket måste använda och så vidare.

Observera

  • Värdet på __package__ varierar mellan olika system, så det bör aldrig ersättas med en bokstavlig sträng.

  • Tillägg får inte manipulera värdet på __package__ eftersom detta kan orsaka oväntat beteende eller fel.

Relativ import

före:

from kitsu import utils

nu:

från . importera utils

Import av paket inom tilläggsmodulen måste använda relativa sökvägar. Detta är en standardfunktion i Python och endast tillämpligt för tillägg som har flera mappar.

Detta stöddes redan i de äldre tilläggen, men förstärktes inte. Därför kan detta bryta bakåtkompatibiliteten.