Problemen oplossen¶
Het diagnostieklogboek van de editor bevat elke relevante regel. Op Windows staat
het in %LOCALAPPDATA%/MTE/log/. Kijk naar het nieuwste bestand na het starten
van de editor.
«Python plugins disabled»¶
Vier smaken; het precieze bericht zegt welke.
PluginHost: MTE_PYTHON is not set; falling back to PATH.¶
Neutraal — de host staat op het punt Python in het PATH te zoeken. Prima, tenzij
er «no Python interpreter found» op volgt.
PluginHost: MTE_PYTHON path '<value>' does not exist.¶
U hebt MTE_PYTHON op een pad met een mapscheiding gezet, maar het bestand op dat
pad ontbreekt. Oplossing: wijs naar de echte python.exe.
PluginHost: MTE_PYTHON='<name>' not found on PATH.¶
U hebt MTE_PYTHON op een kale naam gezet (zonder scheiding), maar die naam staat
niet in het PATH. Oplossing: voeg de map aan het PATH toe, of gebruik de vorm
met het volledige pad hierboven.
PluginHost: no Python interpreter found (…); Python plugins disabled.¶
Noch MTE_PYTHON, noch een van de standaardnamen van het platform (py.exe,
python.exe, python3.exe op Windows; python3 op macOS/Linux) staat in het
PATH. Installeer Python 3.9+ en voeg het aan het PATH toe of stel
MTE_PYTHON in.
Kijk wat het PATH op dit moment ziet, vanuit dezelfde shell van waaruit u de
editor gestart hebt:
(Get-Command py.exe -ErrorAction SilentlyContinue).Source
(Get-Command python.exe -ErrorAction SilentlyContinue).Source
«python worker script … not found»¶
De editor noteert:
Het hostscript van de worker (mte_python_host.py) staat niet naast het
uitvoerbare bestand. Dat gebeurt bij het draaien van een editorbuild waarvan de
POST_BUILD-stap die Python/ klaarzet is overgeslagen. Bouw opnieuw:
Bevestig na het bouwen dat het bestand bestaat:
Plug-in opgesomd maar niet geladen¶
Open de pagina Plug-ins (Voorkeuren → Plug-ins). Veelvoorkomende oorzaken:
| Symptoom | Regel in het logboek | Oorzaak |
|---|---|---|
Etiket over een verschil in apiVersion naast de naam |
PythonPluginBackend: not loading '…': apiVersion does not match host 1. |
Uw plugin.json verklaart een andere apiVersion dan de draaiende editor ondersteunt. |
| De plug-in ziet er grijs uit | PythonPluginBackend: '…' is disabled; listed but not loaded. |
Iemand heeft haar op de pagina Plug-ins uitgeschakeld. Schakel haar weer in en herstart. |
| Helemaal afwezig | PythonPluginBackend: skipping '…': module '…/main.py' does not declare a top-level 'def register(...)'. |
De statische sonde heeft uw module afgewezen. Verplaats register naar het hoogste niveau (kolom 0). |
| Helemaal afwezig | PythonPluginBackend: skipping '…': module file '…' is missing or unreadable. |
plugin.json.module is "main" maar er staat geen main.py naast. |
| Helemaal afwezig | PythonPluginBackend: skipping '…': plugin.json missing required field 'id'. |
Voeg id toe. |
De opdracht gaat niet af¶
U klikte het menu-item aan of drukte de sneltoets in, maar er gebeurde niets.
- Kijk of er regels
[python:<your.id>] …van uwctx.log.info(...)staan. Ontbreken die, dan heeft de callback de worker nooit bereikt. - Kijk of er regels
[worker stderr] …staan. Uitzonderingen binnen uw callback belanden daar. - Bevestig dat de opdracht-id in uw aanroep van
add_itemletterlijk overeenkomt met uwcommand(id=...)— het vergelijken van tekenreeksen is exact.
Fouten «worker died»¶
De host noteert:
Het Python-subproces is geëindigd. Kijk boven die regel naar de stderr van de
worker — Python drukt tracebacks naar stderr af en de host stuurt die door als
[worker stderr] …. Een crash komt vrijwel altijd overeen met een niet-opgevangen
uitzondering in register() of in een callback die weer in de C-API van Python
terechtkwam.
Herstel door de code te repareren en de editor te herstarten. De host herstart een gecrashte worker niet automatisch.
Het inrichten van het venv is mislukt (plug-in opgesomd maar niet geladen)¶
Een plug-in die pyRequires verklaart krijgt bij haar eerste start een virtuele
omgeving ingericht. Mislukt dat, dan bevat het logboek de reden:
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 ...
Veelvoorkomende oorzaken: geen netwerk bij de eerste start, een verkeerd gespelde
vereiste, een pakket zonder wheel voor de Python-versie van de gebruiker. Verhelp
de oorzaak en herstart — het inrichten probeert het bij elke start opnieuw tot het
lukt (het venv wordt pas aan het einde als compleet gestempeld). Om een schone
herbouw af te dwingen verwijdert u <AppLocalData>/PluginVenv/<plugin-id>/.
Machines zonder netwerk kunnen in plaats daarvan een vooraf gebouwd venv/ in het
pakket meeleveren — zie
Verpakken.
Het installatieprogramma weigerde mijn .mteplugin¶
Elke afwijzing komt met een specifiek venstertekst; de veelvoorkomende:
| Het bericht zegt… | Oplossing |
|---|---|
het verplichte veld 'module' ontbreekt |
Voeg "module": "main" toe aan plugin.json. |
| geen Python-module (.py-bestand) | Het archief heeft helemaal geen .py — hebt u de juiste map gecomprimeerd? |
bevat de verklaarde Python-module 'X.py' niet |
module in plugin.json komt niet overeen met de bestandsnaam in het archief. |
verklaart geen def register(...) op het hoogste niveau |
Dezelfde regel als bij het vinden: def register( moet op kolom 0 van <module>.py beginnen. |
| mikt op API-versie N | Bouw opnieuw tegen de huidige apiVersion (zie plugin.json). |
| onveilig pad / te groot / te veel bestanden | Het archief heeft een veiligheidswaarborg laten afgaan — verpak het eenvoudig opnieuw (geen items met .., < 256 MiB uitgepakt). |
Het pakket wordt tegen een tijdelijke kopie gevalideerd, dus een geweigerde installatie raakt een bestaande plug-in nooit aan.
Er wordt helemaal niets genoteerd¶
Bevestig dat uw afhandelaar werkelijk geïnstalleerd is. register(ctx) draait
precies één keer per plug-in per start van de editor. Is register niet op het
hoogste niveau van de module gedefinieerd, dan wijst de statische sonde de plug-in
af voordat die ooit geladen wordt (zie «Plug-in opgesomd maar niet geladen»
hierboven).
Voeg een startregel aan uw register toe:
Ziet u die niet in het logboek, dan voert de worker uw register niet uit —
zoek in de eerdere regels van het logboek naar de reden.
Waar u daarna kijkt¶
- Logboek aan de kant van de editor:
%LOCALAPPDATA%/MTE/log/… - stderr van de worker: hetzelfde logboek, met het etiket
[worker stderr] - Naslag:
ctx-API, Gebeurtenissen,plugin.json - Ontwerpnotities:
PYTHON_PLUGIN_ARCHITECTURE.md(wortel van het repository)