Gå til indholdet

Fejlfinding

Editorens diagnostiklog bærer hver relevant linje. På Windows ligger den i %LOCALAPPDATA%/MTE/log/. Se på den nyeste fil, efter at du har startet editoren.

»Python plugins disabled«

Fire udgaver; den nøjagtige besked fortæller dig hvilken.

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

Neutral — værten er ved at lede efter Python i PATH. Det er fint, medmindre der følger »no Python interpreter found« efter.

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

Du har sat MTE_PYTHON til en sti med et mappeskilletegn, men filen på den sti findes ikke. Løsning: peg på den rigtige 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 sat MTE_PYTHON til et bart navn (uden skilletegn), men det navn ligger ikke i PATH. Løsning: enten føj mappen til PATH, eller brug formen med hele stien ovenfor.

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

Hverken MTE_PYTHON eller nogen af platformens sædvanlige navne (py.exe, python.exe, python3.exe på Windows; python3 på macOS og Linux) ligger i PATH. Installér Python 3.9+, og føj den enten til PATH eller sæt MTE_PYTHON.

Se, hvad PATH ser lige nu, fra den samme skal, du startede editoren fra:

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

»python worker script … not found«

Editoren noterer:

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

Arbejderens værtsscript (mte_python_host.py) ligger ikke ved siden af programfilen. Det sker, når man kører en editorbygning, hvor POST_BUILD-trinnet, der klargør Python/, blev sprunget over. Byg igen:

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

Bekræft, at filen findes efter bygningen:

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

Udvidelsesmodulet er opregnet, men ikke indlæst

Åbn udvidelsesmodulsiden (Indstillinger → Udvidelsesmoduler). Almindelige årsager:

Symptom Linje i loggen Årsag
Et mærke om uoverensstemmende apiVersion ved siden af navnet PythonPluginBackend: not loading '…': apiVersion does not match host 1. Din plugin.json erklærer en anden apiVersion, end den kørende editor understøtter.
Udvidelsesmodulet ser nedtonet ud PythonPluginBackend: '…' is disabled; listed but not loaded. Nogen har slået det fra på udvidelsesmodulsiden. Slå det til igen, og genstart.
Mangler helt PythonPluginBackend: skipping '…': module '…/main.py' does not declare a top-level 'def register(...)'. Den statiske efterprøvning afviste dit modul. Flyt register op på øverste niveau (kolonne 0).
Mangler helt PythonPluginBackend: skipping '…': module file '…' is missing or unreadable. plugin.json.module er "main", men der er ingen main.py ved siden af.
Mangler helt PythonPluginBackend: skipping '…': plugin.json missing required field 'id'. Tilføj id.

Kommandoen udløses ikke

Du klikkede på menupunktet eller trykkede på genvejstasten, men der skete ingenting.

  • Se efter [python:<your.id>] …-linjer fra dit ctx.log.info(...). Mangler de, nåede tilbagekaldet aldrig frem til arbejderen.
  • Se efter [worker stderr] …-linjer. Undtagelser inde i dit tilbagekald lander der.
  • Bekræft, at kommando-id'et i dit add_item-kald passer ordret til dit command(id=...) — tekststrenge sammenlignes nøjagtigt.

Fejl om, at arbejderen døde

Værten noterer:

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

Python-underprocessen sluttede. Se over den linje efter stderr fra arbejderen — Python skriver kaldstakspor til stderr, og værten sender dem videre som [worker stderr] …. Et nedbrud svarer næsten altid til en uopfanget undtagelse i register() eller i et tilbagekald, der gik rekursivt ind i Pythons C-API.

Kom videre ved at rette koden og genstarte editoren. Værten genstarter ikke af sig selv en arbejder, der er gået ned.

Opsætningen af det virtuelle miljø mislykkedes (modulet er opregnet, men ikke indlæst)

Et udvidelsesmodul, der erklærer pyRequires, får sat et virtuelt miljø op ved sin første start. Når det går galt, bærer loggen årsagen:

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

Almindelige årsager: intet netværk ved første start, et forkert stavet krav eller en pakke uden et hjul til brugerens Python-version. Ret årsagen, og genstart — opsætningen forsøges igen ved hver start, indtil den lykkes (det virtuelle miljø stemples først som fuldført til sidst). Vil du fremtvinge en ren genopbygning, så slet <AppLocalData>/PluginVenv/<plugin-id>/. Maskiner uden net kan i stedet levere et færdigbygget venv/ inde i pakken — se Pakning.

Installationsprogrammet afviste min .mteplugin

Hver afvisning kommer med en bestemt besked i et vindue; de almindelige er:

Beskeden siger … Løsning
mangler det påkrævede felt 'module' Tilføj "module": "main" til plugin.json.
intet Python-modul (.py-fil) Arkivet har slet ingen .py — pakkede du den rigtige mappe?
indeholder ikke det erklærede Python-modul 'X.py' module i plugin.json passer ikke til filnavnet i arkivet.
erklærer ikke en def register(...) på øverste niveau Samme regel som ved opdagelsen: def register( skal begynde i kolonne 0 i <module>.py.
retter sig mod API-version N Byg igen mod den nuværende apiVersion (se plugin.json).
utryg sti / for stor / for mange filer Arkivet udløste en sikkerhedsspærre — pak det ganske almindeligt igen (ingen ..-poster, under 256 MiB udpakket).

Pakken efterprøves mod en midlertidig kopi, så en afvist installation rører aldrig et eksisterende udvidelsesmodul.

Der bliver slet ikke skrevet noget i loggen

Bekræft, at din håndtering faktisk er sat op. register(ctx) kører præcis én gang pr. udvidelsesmodul pr. start af editoren. Er register ikke defineret på modulets øverste niveau, afviser den statiske efterprøvning modulet, inden det overhovedet indlæses (se »Udvidelsesmodulet er opregnet, men ikke indlæst« ovenfor).

Tilføj en opstartslinje til din register:

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

Ser du ikke den i loggen, kører arbejderen ikke din register — se i de tidligere logninger efter årsagen.

Hvor du kan lede videre

  • Loggen fra editorens side: %LOCALAPPDATA%/MTE/log/…
  • Arbejderens stderr: samme log, mærket [worker stderr]
  • Dokumentation: ctx-API'en, Hændelser, plugin.json
  • Designnoter: PYTHON_PLUGIN_ARCHITECTURE.md (arkivets rod)