Gå till innehållet

Felsökning

Redigerarens diagnostiklogg innehåller varje relevant rad. På Windows ligger den i %LOCALAPPDATA%/MTE/log/. Titta på den nyaste filen efter att ha startat redigeraren.

«Python plugins disabled»

Fyra varianter; det exakta meddelandet säger vilken.

PluginHost: MTE_PYTHON is not set; falling back to PATH.

Neutralt — värden är på väg att leta efter Python i PATH. Bra, om det inte följs av «no Python interpreter found».

PluginHost: MTE_PYTHON path '<value>' does not exist.

Du satte MTE_PYTHON till en sökväg med en katalogavskiljare, men filen på den sökvägen saknas. Åtgärd: peka på den riktiga python.exe.

$env:MTE_PYTHON = "C:\Users\me\AppData\Local\Programs\Python\Python313\python.exe"

PluginHost: MTE_PYTHON='<name>' not found on PATH.

Du satte MTE_PYTHON till ett naket namn (utan avskiljare), men det namnet finns inte i PATH. Åtgärd: lägg till mappen i PATH, eller använd formen med fullständig sökväg ovan.

PluginHost: no Python interpreter found (…); Python plugins disabled.

Varken MTE_PYTHON eller något av plattformens standardnamn (py.exe, python.exe, python3.exe på Windows; python3 på macOS/Linux) finns i PATH. Installera Python 3.9+ och lägg antingen till det i PATH eller sätt MTE_PYTHON.

Kontrollera vad PATH ser just nu, från samma skal som du startade redigeraren från:

(Get-Command py.exe -ErrorAction SilentlyContinue).Source
(Get-Command python.exe -ErrorAction SilentlyContinue).Source

«python worker script … not found»

Redigeraren noterar:

PluginHost: python worker script '<path>' not found; Python plugins disabled.

Arbetarens värdskript (mte_python_host.py) ligger inte bredvid den körbara filen. Det händer när man kör ett redigerarbygge vars POST_BUILD-steg som ställer i ordning Python/ hoppades över. Bygg om:

cmake --build Build\.cmake\x64-debug --target ModularTextEditor --config Debug

Bekräfta att filen finns efter bygget:

Test-Path Build\MTE_Windows_d\Python\host\mte_python_host.py

Insticksmodulen listad men inte inläst

Öppna sidan Insticksmoduler (Inställningar → Insticksmoduler). Vanliga orsaker:

Symtom Rad i loggen Orsak
Etikett om avvikande apiVersion bredvid namnet PythonPluginBackend: not loading '…': apiVersion does not match host 1. Din plugin.json deklarerar en annan apiVersion än den körande redigeraren stöder.
Insticksmodulen ser gråtonad ut PythonPluginBackend: '…' is disabled; listed but not loaded. Någon inaktiverade den på sidan Insticksmoduler. Aktivera den igen och starta om.
Helt frånvarande PythonPluginBackend: skipping '…': module '…/main.py' does not declare a top-level 'def register(...)'. Den statiska sonden avvisade din modul. Flytta register till toppnivån (kolumn 0).
Helt frånvarande PythonPluginBackend: skipping '…': module file '…' is missing or unreadable. plugin.json.module är "main" men det finns ingen main.py bredvid.
Helt frånvarande PythonPluginBackend: skipping '…': plugin.json missing required field 'id'. Lägg till id.

Kommandot utlöses inte

Du klickade på menyposten eller tryckte på kortkommandot men inget hände.

  • Leta efter rader [python:<your.id>] … från din ctx.log.info(...). Saknas de nådde återanropet aldrig arbetaren.
  • Leta efter rader [worker stderr] …. Undantag inuti ditt återanrop hamnar där.
  • Bekräfta att kommando-id:t i ditt anrop av add_item stämmer ordagrant med ditt command(id=...) — strängjämförelsen är exakt.

Fel om «worker died»

Värden noterar:

… worker exited with code N
… worker crashed (code N)

Python-underprocessen tog slut. Leta ovanför den raden efter arbetarens stderr — Python skriver spårningar till stderr och värden vidarebefordrar dem som [worker stderr] …. En krasch motsvarar nästan alltid ett ofångat undantag i register() eller i ett återanrop som gick tillbaka in i Pythons C-API.

Återhämta dig genom att rätta koden och starta om redigeraren. Värden startar inte om en kraschad arbetare automatiskt.

Iordningställandet av venven misslyckades (insticksmodulen listad men inte inläst)

En insticksmodul som deklarerar pyRequires får en virtuell miljö iordningställd vid sin första start. Misslyckas det innehåller loggen skälet:

PluginHost: 'org.example.x' needs a venv (no venv provisioned yet).
PythonRuntime: provisioning venv at '...' (1 requirement(s)); ...
PluginHost: venv provisioning for 'org.example.x' failed: pip install
failed: ... No matching distribution found for no-such-package ...

Vanliga orsaker: inget nätverk vid första starten, ett felstavat krav, ett paket utan wheel för användarens Python-version. Rätta orsaken och starta om — iordningställandet försöker igen vid varje start tills det lyckas (venven stämplas som komplett först på slutet). För att tvinga fram en ren ombyggnad tar du bort <AppLocalData>/PluginVenv/<plugin-id>/. Maskiner utan nätverk kan i stället leverera en förbyggd venv/ inuti paketet — se Paketering.

Installeraren avvisade min .mteplugin

Varje avvisning kommer med ett specifikt dialogmeddelande; de vanliga:

Meddelandet säger… Åtgärd
det obligatoriska fältet 'module' saknas Lägg till "module": "main" i plugin.json.
ingen Python-modul (.py-fil) Arkivet har ingen .py alls — komprimerade du rätt mapp?
innehåller inte den deklarerade Python-modulen 'X.py' module i plugin.json stämmer inte med filnamnet i arkivet.
deklarerar inte något def register(...) på toppnivå Samma regel som vid upptäckten: def register( måste börja på kolumn 0 i <module>.py.
siktar på API-version N Bygg om mot den aktuella apiVersion (se plugin.json).
osäker sökväg / för stort / för många filer Arkivet utlöste ett säkerhetsskydd — packa om det enkelt (inga poster med .., < 256 MiB uppackat).

Paketet valideras mot en tillfällig kopia, så en avvisad installation rör aldrig en befintlig insticksmodul.

Inget alls loggas

Bekräfta att din hanterare verkligen är installerad. register(ctx) körs exakt en gång per insticksmodul per start av redigeraren. Är register inte definierad på modulens toppnivå avvisar den statiska sonden modulen innan den ens läses in (se «Insticksmodulen listad men inte inläst» ovan).

Lägg till en startrad i din register:

def register(ctx):
    ctx.log.info("wordcount: register() ran")
    # …

Ser du inte den i loggen kör arbetaren inte din register — leta i de tidigare loggraderna efter skälet.

Var du tittar härnäst

  • Logg på redigerarsidan: %LOCALAPPDATA%/MTE/log/…
  • Arbetarens stderr: samma logg, märkt [worker stderr]
  • Referens: ctx-API:t, Händelser, plugin.json
  • Designanteckningar: PYTHON_PLUGIN_ARCHITECTURE.md (repositoriets rot)