在使用n8n时,大家可能会发现code节点虽然能运行Python代码,但它处于一个受限的沙盒环境,没办法直接调用外部库。可遇到复杂逻辑时,仅靠自带节点很难完成任务,这就需要能完整调用外部库的环境了。
经过摸索,站长百科找到了一个好方法:通过execute command节点直接运行Python文件。为了让docker容器升级后,Python安装的第三方库不丢失,可以用virtualenv创建一个Python环境并挂载到本地目录。下面详细介绍操作步骤。
一、n8n安装
用docker安装n8n运行以下命令:
docker run -d –restart=unless-stopped \
–name n8n \
-p 8888:5678 \
-v ~/.n8n:/home/node/.n8n \
-v ~/docker/n8n:/data \
-e TZ=Asia/Shanghai \
-e N8N_TIMEZONE=Asia/Shanghai \
-e GENERIC_TIMEZONE=Asia/Shanghai \
-e N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true \
-e N8N_SECURE_COOKIE=false \
–user node \
docker.n8n.io/n8nio/n8n
注意:-v ~/docker/n8n:/data 这条命令,要把~/docker/n8n 换成自己本地的一个目录,这样容器内的 /data 目录就会永久挂载到你指定的本地目录,后面我们要用的 virtualenv 安装 Python 就放在这里。另外,-p 8888:5678 中的 8888 端口是可以根据自己的需求修改为外部访问的端口的。
二、以root用户进入容器安装Python
安装好n8n后,我们需要打开终端,运行下面的命令以root用户进入容器:
docker exec -u root -it n8n sh
之所以用root用户进入容器,是因为只有它才有权限安装virtualenv。
进入容器后,执行下面的命令安装 virtualenv:
apk add py3-virtualenv
有了virtualenv才能创建一个虚拟的Python环境。
三、创建Python虚拟环境
为了让创建的虚拟环境能永久保存,不会因为容器版本升级而丢失,我们把它放在挂载的文件夹下,执行命令:
python3 -m venv /data/venv
执行完后,会在容器内的 /data/venv 文件夹下创建一个 Python 虚拟环境。接下来,要把这个文件夹的权限给 node 用户,这样才能在 n8n 节点上安装包,命令如下:
chown -R node:node /data/venv
操作完成后,退出容器:
exit
四、在execute command节点中安装第三方包
在n8n中创建一个execute command节点,以安装pandas为例,在节点中运行安装命令:
/data/venv/bin/pip3 install pandas
这里的/data/venv/bin/pip3就是我们前面安装并持久化在本地的虚拟环境的pip命令。执行成功后,pandas就安装到虚拟环境中了。
五、在execute command节点中执行外部Python文件
当安装好所有需要的第三方包后,就可以调用容器内挂载在本地的Python文件了。比如前面安装n8n时把容器内的/data文件夹挂载到了本地的~/docker/n8n目录下,那么只需要把Python文件放在~/docker/n8n 文件夹或其子文件夹下,容器内就可以访问到。执行 Python 文件的命令是:
/data/venv/bin/python3 /data/xxx.py
如此一来,就实现了间接运行Python文件的目的,而且容器升级后,之前安装的Python第三方包也能持久化保留下来。






