Gå til innhold

Feilsøking

Redigererens diagnostikklogg bærer hver relevante linje. På Windows ligger den i %LOCALAPPDATA%/MTE/log/. Se på den nyeste filen etter at du har startet redigereren.

«Python plugins disabled»

Fire utgaver; den nøyaktige meldingen forteller deg hvilken.

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

Nøytral — verten holder på å lete etter Python i PATH. Det er greit med mindre det følger «no Python interpreter found» etter.

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

Du har satt MTE_PYTHON til en sti med et mappeskilletegn, men filen på den stien finnes ikke. Løsning: pek på den riktige python.exe.

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

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

Du har satt MTE_PYTHON til et bart navn (uten skilletegn), men det navnet ligger ikke i PATH. Løsning: enten legg mappen i PATH, eller bruk formen med hele stien ovenfor.

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

Verken MTE_PYTHON eller noen av plattformens vanlige navn (py.exe, python.exe, python3.exe på Windows; python3 på macOS og Linux) ligger i PATH. Installer Python 3.9+, og legg den enten i PATH eller sett MTE_PYTHON.

Se hva PATH ser akkurat nå, fra det samme skallet du startet redigereren fra:

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

«python worker script … not found»

Redigereren noterer:

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

Arbeiderens vertsskript (mte_python_host.py) ligger ikke ved siden av programfilen. Det skjer når man kjører et redigererbygg der POST_BUILD-steget som klargjør Python/, ble hoppet over. Bygg på nytt:

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

Bekreft at filen finnes etter bygget:

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

Programtillegget er listet, men ikke lastet inn

Åpne programtilleggssiden (Innstillinger → Programtillegg). Vanlige årsaker:

Symptom Linje i loggen Årsak
Et merke om uoverensstemmende apiVersion ved siden av navnet PythonPluginBackend: not loading '…': apiVersion does not match host 1. plugin.json-en din erklærer en annen apiVersion enn den redigereren som kjører, støtter.
Programtillegget ser nedtonet ut PythonPluginBackend: '…' is disabled; listed but not loaded. Noen har slått det av på programtilleggssiden. Slå det på igjen, og start på nytt.
Mangler helt PythonPluginBackend: skipping '…': module '…/main.py' does not declare a top-level 'def register(...)'. Den statiske kontrollen avviste modulet ditt. Flytt register opp på øverste nivå (kolonne 0).
Mangler helt PythonPluginBackend: skipping '…': module file '…' is missing or unreadable. plugin.json.module er "main", men det finnes ingen main.py ved siden av.
Mangler helt PythonPluginBackend: skipping '…': plugin.json missing required field 'id'. Legg til id.

Kommandoen utløses ikke

Du klikket på menyposten eller trykket på hurtigtasten, men ingenting skjedde.

  • Se etter [python:<your.id>] …-linjer fra ctx.log.info(...). Mangler de, nådde tilbakekallet aldri fram til arbeideren.
  • Se etter [worker stderr] …-linjer. Unntak inne i tilbakekallet ditt lander der.
  • Bekreft at kommando-id-en i add_item-kallet ditt passer ordrett til command(id=...) — tekststrenger sammenlignes nøyaktig.

Feil om at arbeideren døde

Verten noterer:

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

Python-underprosessen tok slutt. Se over den linjen etter stderr fra arbeideren — Python skriver kallstakspor til stderr, og verten sender dem videre som [worker stderr] …. Et krasj svarer nesten alltid til et unntak som ikke ble fanget, i register() eller i et tilbakekall som gikk rekursivt inn i Pythons C-API.

Kom videre ved å rette koden og starte redigereren på nytt. Verten starter ikke av seg selv en arbeider som har krasjet.

Oppsettet av det virtuelle miljøet mislyktes (programtillegget er listet, men ikke lastet inn)

Et programtillegg som erklærer pyRequires, får satt opp et virtuelt miljø ved sin første oppstart. Når det går galt, bærer loggen grunnen:

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 ...

Vanlige årsaker: intet nettverk ved første oppstart, et feilstavet krav, eller en pakke uten et hjul for brukerens Python-versjon. Rett årsaken, og start på nytt — oppsettet prøves igjen ved hver oppstart inntil det lykkes (det virtuelle miljøet stemples først som ferdig til slutt). Vil du tvinge fram en ren gjenoppbygging, så slett <AppLocalData>/PluginVenv/<plugin-id>/. Maskiner uten nett kan i stedet levere et ferdigbygget venv/ inne i pakken — se Pakking.

Installasjonsprogrammet avviste .mteplugin-en min

Hver avvisning kommer med en bestemt melding i et vindu; de vanlige er:

Meldingen sier … Løsning
mangler det påkrevde feltet 'module' Legg til "module": "main" i plugin.json.
intet Python-modul (.py-fil) Arkivet har slett ingen .py — pakket du den riktige mappen?
inneholder ikke det erklærte Python-modulet 'X.py' module i plugin.json passer ikke til filnavnet i arkivet.
erklærer ikke en def register(...) på øverste nivå Samme regel som ved oppdagelsen: def register( må begynne i kolonne 0 i <module>.py.
retter seg mot API-versjon N Bygg på nytt mot den gjeldende apiVersion (se plugin.json).
utrygg sti / for stor / for mange filer Arkivet utløste en sikkerhetssperre — pakk det helt alminnelig på nytt (ingen ..-poster, under 256 MiB utpakket).

Pakken kontrolleres mot en midlertidig kopi, så en avvist installasjon rører aldri et programtillegg som alt finnes.

Det blir ikke skrevet noe i loggen i det hele tatt

Bekreft at behandleren din faktisk er satt opp. register(ctx) kjører nøyaktig én gang per programtillegg per oppstart av redigereren. Er register ikke definert på modulets øverste nivå, avviser den statiske kontrollen programtillegget før det i det hele tatt lastes inn (se «Programtillegget er listet, men ikke lastet inn» ovenfor).

Legg en oppstartslinje til i register-en din:

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

Ser du ikke den i loggen, kjører ikke arbeideren register-en din — se i de tidligere loggene etter grunnen.

Hvor du kan lete videre

  • Loggen fra redigererens side: %LOCALAPPDATA%/MTE/log/…
  • Arbeiderens stderr: samme logg, merket [worker stderr]
  • Dokumentasjon: ctx-API-et, Hendelser, plugin.json
  • Designnotater: PYTHON_PLUGIN_ARCHITECTURE.md (arkivets rot)