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.
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:
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:
Bekræft, at filen findes efter bygningen:
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 ditctx.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 ditcommand(id=...)— tekststrenge sammenlignes nøjagtigt.
Fejl om, at arbejderen døde¶
Værten noterer:
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:
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)