跳到正文
W Winse Blog
automation ops dev 1 min read

无需 Docker:n8n 2.x internal 模式下 Python Task Runner 配置实践

最近发现 n8n 已经更新到 2.x 版本了。

新版本在 安全性 上有明显增强,并且将工作流的 Save 和 Publish 彻底解耦。而其中最最重要的、也是影响最大的是独立的任务执行器 Task Runner,把任务执行从n8n主进程中剥离,更安全(沙箱隔离)更高效(横向扩展)的执行代码任务。

一、

按照官方文档的说明,推荐使用 Docker 进行部署,分别启动:

  • 一个 n8n 主服务容器

  • 一个或多个 Task Runner 容器,用于执行代码节点的任务

任务执行器有两种模式来运行:internal 内部模式和 external 外部模式,官网重点推荐并详细的介绍了外部模式的使用步骤,但它是使用 Docker 容器来部署的。

对于我这在手机上 Termux 运行的,追求功能和性能,不那么要求安全隔离需求的个人使用,最佳实践当然得是能本地运行。 没有文档,那就自己摸索把 Python Task Runner 单独本地跑起来?

结合官方源码和容器配置的环境变量,实际操作起来还算顺手。

二、

升级到2.x后,启动有错误信息了,internal 模式下的 Python task runner 启动失败。

在源码中查找错误日志,启动内部任务执行器 startInternalTaskRunners 时,检查 Python 任务依赖时抛出的异常。

检查没有相应的 Python .venv 虚拟环境,所以报错了。

真实路径看的不是清楚,路径到底是在什么位置?

我们先找到编译后 n8n 的 task-runner-process-py 。

在检测代码方法中,打印出程序的路径。

再次启动,就能看到 Python 虚拟环境(Python任务执行器)安装的位置了。

虽然 @n8n/task-runner-python 放在 node_modules 目录下,但它不是一个 nodejs 包。所以,我们手动建立目录,并从源码中打包该 packages/@n8n/task-runner-python 并上传。

安装 Python 虚拟环境。

安装该 Python task runner 的依赖。

顺便也把一些常用的库安装了,后面 Python 代码节点会用的到。

增加运行依赖包的白名单,然后启动 n8n。

三、

增加一个 Code in Python(Native) 节点,输出 Python 的版本信息。

除了使用标准库,也可以使用外部安装的库,打印视频下载库 yt_dlp 的版本信息。

在聊天窗口输入 youtube 地址,调用 Python 来获取视频的元数据。

Python有大量的库可以满足我们日常的使用需求,可以想着把一些要手动的、繁琐的事情自动化了,然后用了 n8n 还需要去结合下AI的。

四、

总结一下,n8n 2.x 新版本引入了独立的Task Runner 架构,将任务从主线程中剥离。其中,external模式的 Task Runner 官方文档推荐通过 Docker 容器运行,适合生产环境和高安全要求场景。

在个人使用时、资源有限(手机Termux)的情况下,为了实现最小版本运行,本文尝试并成功在 internal 模式 启动 Python task runner,从而不需要 Docker 也可以使用Python Code 节点。

配置好下面的三步,就能使用 Python Code 节点来扩充流程了。

  1. 把 @n8n/python-task-runner 源码拷贝 到 node_modules 目录下。使主进程能正确加载 TaskRunner。

  2. 在 python-task-runner 源码目录下建立 Python venv 虚拟环境,安装工作流代码节点需要的 Python 依赖包。

  3. 配置 import 导入白名单:N8N_RUNNERS_STDLIB_ALLOW,N8N_RUNNERS_EXTERNAL_ALLOW

在 GitHub 上讨论

欢迎通过 GitHub Issue 留言或反馈。每条讨论都会关联到对应文章的源文件路径。

2025-12-25-无需-Docker:n8n-2.x-internal-模式下-Python-Task-Runner-配置实践.md

Related posts