Om du börjat använda QIGS 3 så kanske du märkt att inställningar, mallar med mera har bytt plats. Katalogen .qgis3 finns inte, utan inställningarna lagras i stället under katalogen .local/share/QGIS/QGIS3. Dessutom så finns nu möjlighet att använda olika profiler för varje användare, vilket skapar separata kataloger med inställningar.
När man bygger anpassade funktioner i Python så skall dessa lagras på sökvägen .local/share/QGIS/QGIS3/profiles/default/python/expressions/, eller med ett annat profilnamn i sökvägen. Dessa uttryck är helt anpassade till QGIS, men hur gör man om man vill använda ett externt pythonbibliotek i uttrycken?
På Windows speciellt har jag märkt att det kan vara lite snårigt att hitta ”rätt” pythoninstallation om man skall lägga till ett externt bibliotek, exempelvis med pip. Det går, men om det är mindre bibliotek, eller funktioner man vill använda enbart i QGIS, så finns det ett enklare sätt.
Jag använde detta sätt i ett inlägg förra veckan där Google Open Location Code funktionen lades till QGIS, men det fungerar för vilket pythonbibliotek som helst (tror jag).
De .py filer som man vill använda kopierar man helt enkelt in till .local/share/QGIS/QGIS3/profiles/default/python/, vilket är den överordnade katalogen till expressions från tidigare. QGIS söker efter filer i denna katalog som standard, och de kan importeras med import såväl från uttryck som från pythonkonsolen.
Jag tar ännu ett exempel. Funktionen mgrspy, som jag har i en katalog, kopierar jag in på sökvägen. I katalogen finns filerna __init__.py och mgrs.py och dessa anropas från QGIS med from mgrspy import mgrs.
Om man kör från pyhtonkonsolen så kan man sedan exempelvis anropa help(mgrs) för att få lite information om hur funktionen skall användas.
MGRS har jag talat om tidigare, och även använt för att skapa kartor med militära koordinatbeteckningar. För att generera MGRS så anropas en funktion med latitud, longitud och önskad precision.
Svaret är en textsträng som kan användas för att plocka ut olika delar med olika strängfunktioner, exempelvis i layout.
Kartan man har är säkert projicerad i något system, men det är ganska enkelt att plocka fram lat/long från dessa med uttrycksbyggaren, men då får man först skapa en anpassad funktion där mgrs.toMgrs() funktionen ingår.
Det går även att gå åt andra hållet, genom att skicka en MGRS position till funktionen mgrs.toWgs().
En fördel med den här metoden, att lägga pythonfiler direkt i QGIS katalogen i den egna profilen är att det går att göra, även om man inte har de administrativa rättigheter som krävs för att installera med pip eller med en anpassad ”installer”. Om du därför hittar en funktion som någon annan skapat, som du vill kunna använda i QGIS, så är detta ett smidigt sätt.
Om du installerat ett plug-in där det meddelas att det saknas ett pythonbibliotek, så kan eventuellt den här metoden användas även då, om det inte går att installera beroenden på andra sätt.