n8n中python调用外部库

在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

安装好后,我们需要打开终端,运行下面命令,以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 命令。

执行成功后,它就在虚拟环境中安装好了。

在 execute command 节点中执行外部python文件

当你安装好你所需要的所有第三方包后。

我们就可以调用你容器内挂载在本地的 python 文件。

比如,我前面安装的 n8n 是将容器内的 /data 文件夹挂载在本地的~/docker/n8n 目录下。

我只需要将我python文件放在``~/docker/n8n`文件夹或其子文件夹下,容器内就可以访问到。

/data/venv/bin/python3  /data/xxx.py

这样,我们就可以间接实现运行python文件了。并且容器升级后,前面安装的python第三方包也持久化保留了下来。

非常棒的教程,等有空去测试

这玩意有点小众,我也是折腾比较长的时间,找到目前相对对自己来说比较方便的方法。每次n8n通过容器升级后,只需要在容器内apk add py3-virtualenv安装下virtualenv,不再需要费力重新安装第三方库了。

使用 1Panel 的情况

如果你是参照我们的教程,使用 1Panel 或宝塔面板安装的 n8n,大致的方法是一致的。

首先,通过 1Panel 进入容器终端


在 1Panel 的【容器】列表中找到你的 n8n,在右侧点击终端,勾选【自定义】。1Panel 默认进入容器终端时,使用 root,因此我们直接进入就行。

如主贴,在容器中安装 virtualenv:

cd /home/node
apk add  py3-virtualenv

创建 Python 虚拟环境

如主贴,创建虚拟环境,放在挂载的永久化目录中,这样自定义的 Python 就不会因升级 n8n 而消失:

python3 -m venv /n8ndata/venv

这一步与主贴略微不同,是因为在我们的教程中,挂载的目录不一样。

然后,再赋予这个文件夹权限:

chown -R node:node /n8ndata/venv

关闭 1Panel 容器终端界面,现在你可以回到主贴的这个步骤继续操作了:在 execute command 节点中安装第三方包

但记得,安装的命令也是需要和实际地址一样的,比如安装 pandas,应为:

/n8ndata/venv/bin/pip3 install pandas

用perplexity 分享截屏解决问题,超好用

运行tomarkdown.py文件的时候如果需要跟参数,直接在后面跟需要带入的参数吗?