Exécuteur Python externe, sans conteneur

Décrire le problème/l’erreur/la question

J’essaie de configurer un exécuteur Python externe sans utiliser de conteneur.

J’ai suivi le guide Task runners ( Task runners | n8n Docs ) mais j’ai installé l’application launcher ( GitHub - n8n-io/task-runner-launcher: CLI utility to launch an n8n task runner in external mode · GitHub ) localement.
J’ai installé un exécuteur Python,
❯ pip list | grep python-runner
python-runner 0.6.1

task-runners.json
{
"task-runners": [
{
"runner-type": "python",
"workdir": "/home/user/n8n-files/",
"command": "/usr/bin/python3",
"args": [ "-m", "python-runner" ],
"health-check-server-port": "5681"
}
]
}

Quand je lance l’application launcher, la sortie se bloque à,
INFO [launcher:py] Waiting for task broker to be ready…
INFO [launcher:py] Waiting for launcher’s task offer to be accepted…

si je démarre un flux de travail n8n, je vois les erreurs,
ERROR [runner:py] /usr/bin/python3: No module named python-runner
ERROR [launcher:py] Runner process exited with error: exit status 1

Je ne crois pas que cela soit lié aux variables d’environnement, car je les ai dans /etc/environment, mais j’ai aussi essayé de les ajouter dans task-runners.json

Je suis sûr que je manque quelque chose d’évident. Est-ce le mauvais exécuteur ?

Quel est le message d’erreur (le cas échéant) ?

./task-runner-launcher python
INFO Starting launcher’s health check server at port 5680
INFO [launcher:py] Starting launcher goroutine…
WARN DEPRECATION WARNING: N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT will no longer be automatically passed to runners in a future version. Please add this env var to ‘allowed-env’ or use ‘env-overrides’ in your task runner config to maintain current behavior.
WARN DEPRECATION WARNING: N8N_RUNNERS_TASK_TIMEOUT will no longer be automatically passed to runners in a future version. Please add this env var to ‘allowed-env’ or use ‘env-overrides’ in your task runner config to maintain current behavior.
INFO [launcher:py] Waiting for task broker to be ready…
INFO [launcher:py] Waiting for launcher’s task offer to be accepted…
ERROR [runner:py] /usr/bin/python3: No module named python-runner
ERROR [launcher:py] Runner process exited with error: exit status 1

Partager la sortie retournée par le dernier nœud

N/A

Informations sur votre configuration n8n

  • version de n8n : 2.23.2
  • Base de données (par défaut : SQLite) : N/A
  • paramètre N8N_EXECUTIONS_PROCESS de n8n (par défaut : own, main) :
  • Exécution de n8n via (Docker, npm, n8n cloud, application de bureau) : npm
  • Système d’exploitation : Cachy OS

Compris ! Tu veux que je réécrive la même réponse mais que ça paraisse moins IA et plus humain. Voilà :


En fait, la solution est plus simple que tu le penses c’est juste une typo dans ta config.

Tes args ont "python-runner" avec un tiret, mais le flag -m de Python n’accepte pas les tirets dans les noms de modules. Change-le en underscore :

"args": [ "-m", "python_runner" ]

C’est littéralement tout ce qui provoque l’erreur No module named python-runner.

Avant de redémarrer, lance juste ça rapidement pour confirmer que tout pointe au bon endroit :

/usr/bin/python3 -m python_runner --help

Si ça marche dans ton terminal, c’est bon. Si ça échoue, ton package a probablement été installé sous un autre environnement Python. Répare-le avec :

/usr/bin/python3 -m pip install python-runner

Ensuite réessaye et ça devrait marcher.

Ah et ces messages Waiting for task broker sont complètement normaux c’est juste le launcher qui attend que n8n se connecte, rien de cassé là-dedans.

Tiens-moi au courant de comment ça se passe.

C’est une bonne remarque !

Maintenant, l’application de lancement me donne,

ERROR [runner:py] /usr/bin/python3: No module named python_runner.main; 'python_runner' is a package and cannot be directly executed
2026/06/03 19:09:15 ERROR [launcher:py] Runner process exited with error: exit status 1

et la raison en est,
❯ /usr/bin/python3 -m python_runner --help
Traceback (most recent call last):
File "", line 194, in _run_module_as_main
File "", line 164, in _get_module_details
File "", line 893, in get_code
File "", line 823, in source_to_code
File "", line 491, in _call_with_frames_removed
File "/home/user/Templates/n8n_python_runner/python_runner.py", line 8
self.send_response(200); self.end_headers(); self.wfile.write(b"OK") else:
^^^^
SyntaxError: invalid syntax

Est-ce que c’est le mauvais task-runner ? Puis-je utiliser le package npm @n8n/task-runner ?

Merci !

ÉDIT ;

Vous vous êtes fait signaler parce que vous aviez l’air d’une IA ? :rofl:
Ce message est resté en « En attente » pendant un jour. La modération est plutôt stricte par ici !

Python n’exécute pas la bibliothèque que vous avez installée avec pip. Il trouve un fichier dans votre répertoire appelé python_runner.py. Il essaie d’exécuter ce fichier à la place. Ce fichier a une erreur à la ligne 8, je crois. C’est pourquoi il plante.

La solution :

  • Renommez le fichier python_runner.py dans le répertoire /home/user/Templates/n8n_python_runner en quelque chose comme my_test_runner.py.

Quand vous faites cela, Python cherchera la bibliothèque que vous avez installée et utilisera celle-ci au lieu du fichier local. Essayez ceci. Voyez ce qui se passe. Python exécutera alors la bibliothèque que vous avez installée avec pip et non le fichier python_runner.py local. Cela devrait résoudre le problème, avec Python qui n’exécutait pas la bibliothèque que vous aviez installée.

J’ai créé un venv et pip install python-runner. Depuis l’intérieur du venv,
venv❯ python3 -c "import python_runner; print('Success')"
Success

n8n-task-runners.json
{
"task-runners": [
{
"runner-type": "python",
"workdir": "/home/user/.n8n-files/",
"command": "/home/user/Templates/n8n_python_runner/venv/bin/python3",
"args": [ "/home/user/Templates/n8n_python_runner/venv/lib/python3.14/site-packages/python_runner/runner.py" ],
"health-check-server-port": "5681"
}
]
}

./task-runner-launcher python
INFO [launcher:py] En attente de la disponibilité du courtier de tâches…
INFO [launcher:py] En attente de l'acceptation de l'offre de tâche du lanceur…
ERROR [runner:py] Traceback (most recent call last):
ERROR [runner:py] File "/home/kc/Templates/n8n_python_runner/venv/lib/python3.14/site-packages/python_runner/runner.py", line 13, in
ERROR [runner:py] from .output import OutputBuffer
ERROR [runner:py] ImportError: attempted relative import with no known parent package
ERROR [launcher:py] Runner process exited with error: exit status 1

Du progrès ?

@lost_ghost Bonjour !

le problème fondamental : python-runner de PyPI n’est pas le task runner Python de n8n. C’est un paquet différent et sans rapport. Le vrai runner Python de n8n n’est pas publié sur PyPI, c’est pour ça que votre pip install antérieur depuis le repo n’a pas fonctionné non plus.

Sans Docker, votre seule option est de cloner le repo n8n et de configurer le runner depuis la source :

git clone https://github.com/n8n-io/n8n.git
cd n8n/packages/@n8n/task-runner-python
python3 -m venv .venv
source .venv/bin/activate
pip install -e .

Ensuite, pointez votre task-runners.json vers ce venv avec le point d’entrée -m src.main. C’est du territoire non pris en charge cependant, la documentation ne couvre que la configuration basée sur Docker.

Faites-moi savoir si ça marche !

./task-runner-launcher python
INFO [launcher:py] Waiting for task broker to be ready…
2026/06/04 12:38:50 INFO [launcher:py] Waiting for launcher's task offer to be accepted…
2026/06/04 12:39:08 INFO [launcher:py] Runner process exited on idle timeout
2026/06/04 12:39:08 INFO [launcher:py] Waiting for task broker to be ready…
2026/06/04 12:39:08 INFO [launcher:py] Waiting for launcher's task offer to be accepted…

Dans l’interface n8n, j’obtiens une erreur :
Violations de sécurité détectées

Je ne suis pas sûr de ce que pourraient être ces violations de sécurité.

@lost_ghost

Votre runner fonctionne maintenant et le cycle de timeout d’inactivité dans les logs est normal, le lanceur arrête le runner en cas d’inactivité et le redémarre à la demande.

L’erreur « Security violations detected » signifie que le sandbox bloque les imports de la stdlib Python par défaut.

Ajoutez env-overrides à votre task-runners.json :

{
  "runner-type": "python",
  "workdir": "/home/user/.n8n-files/",
  "command": "/path/to/n8n/packages/@n8n/task-runner-python/.venv/bin/python3",
  "args": ["-I", "-B", "-X", "disable_remote_debug", "-m", "src.main"],
  "health-check-server-port": "5681",
  "env-overrides": {
    "N8N_RUNNERS_STDLIB_ALLOW": "*",
    "N8N_RUNNERS_EXTERNAL_ALLOW": "*"
  }
}

Dites-moi si cela élimine l’erreur de sécurité !

Ouais, ça a résolu le problème. Merci ! Ça m’a bloqué pendant une semaine maintenant.