n8n 中文系列教程_25.在n8n中调用外部Python库

在n8n中使用Python处理复杂任务时,内置的Code节点由于运行在沙盒环境中,无法直接调用外部Python库(如pandas、requests等),限制了工作流的扩展能力。本文将介绍一种持久化解决方案 :通过Docker挂载目录+虚拟环境,实现在n8n中自由安装并调用任意Python库,同时确保容器升级后环境不丢失。无论是数据分析、API交互还是机器学习,均可通过此方法无缝集成到自动化流程中。

1. 背景与问题描述

在n8n工作流中使用Python代码时,开发者会遇到一个明显的限制:Code节点虽然支持Python代码执行,但运行在一个沙盒环境中,无法调用外部Python库。这对于需要复杂数据处理、机器学习或其他高级功能的场景来说是个重大障碍。

2. 解决方案概述

通过实践探索,我找到了一套完整的解决方案:

  1. 使用Docker安装n8n并进行适当配置

  2. 在容器内创建持久化的Python虚拟环境

  3. 通过Execute Command节点安装所需Python库

  4. 执行外部Python脚本文件

3. 详细实施步骤

3.1 n8n的Docker安装与配置

复制代码
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:将容器内的/data目录挂载到本地目录,确保数据持久化

  • -p 8888:5678:端口映射,8888可改为任意可用端口

  • N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true:允许使用外部工具

3.2 以root用户进入容器安装必要组件

安装好后,我们需要打开终端,运行下面命令,以root用户进入容器:

复制代码
docker exec -u root -it n8n sh

在容器内执行以下命令安装virtualenv:

然后我们再执行下面命令安装 virtualenv:

复制代码
apk add py3-virtualenv

有了virtualenv,我们才可以再安装一个虚拟的python环境。

3.3 创建持久化的Python虚拟环境

创建虚拟环境,放在挂载的文件夹下,这样可以永久化保存,不会因为升级了容器版本而没有了:

复制代码
python3 -m venv /data/venv

执行完后,它会在容器内的 /data/venv 文件夹下创建一个 python虚拟环境。

再将这个文件夹权限给 node 用户,这样才可以在 n8n 节点上安装包:

复制代码
chown -R node:node /data/venv
复制代码

然后,我们退出容器:

技术细节

  • 虚拟环境创建在挂载目录/data下,确保容器升级后环境不丢失

  • 权限修改为node用户,保证n8n节点可以正常使用该环境

3.4 安装Python第三方库

在n8n中创建Execute Command节点,执行以下命令安装所需库:

在节点中运行安装第三方包的命令:

这里以安装 pandas 为例,你可以安装任意的第三方包:

复制代码
/data/venv/bin/pip3 install pandas

这里的 /data/venv/bin/pip3就是前面我们安装的并持久化在本地的虚拟环境的 pip 命令。

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

高级技巧

  • 可以一次性安装多个库:/data/venv/bin/pip3 install pandas numpy requests

  • 指定版本安装:/data/venv/bin/pip3 install pandas==1.3.5

3.5 执行外部Python脚本

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

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

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

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

复制代码
/data/venv/bin/python3 /data/your_script.py

最佳实践建议

  1. 在脚本中添加日志输出,方便调试

  2. 使用相对路径或环境变量指定文件位置

  3. 考虑添加错误处理机制,将执行结果返回给n8n

4. 方案优势与注意事项

4.1 方案优势

  • 持久化:虚拟环境和安装的库不会因容器升级而丢失

  • 灵活性:可以安装任何Python库,不受沙盒限制

  • 可维护性:Python代码可以存储在外部文件中,便于版本控制和管理

4.2 注意事项

  1. 容器重启后,需要重新进入容器激活虚拟环境(如有必要)

  2. 注意Python版本兼容性问题

  3. 大型库安装可能需要较长时间,建议在工作流中添加适当等待时间

  4. 考虑安全风险,不要随意安装不可信的Python包


通过这种灵活的方式,n8n的工作流能力可以得到极大扩展,满足更复杂的业务需求。

资料推荐

本指南持续更新,建议收藏并定期查看n8n官方文档获取。实践过程中遇到任何技术问题,欢迎在评论区留言讨论。


更多内容可查看本专栏文章,有用的话记得点赞收藏噜!

相关推荐
黄雪超2 分钟前
JVM——从JIT到AOT:JVM编译器的云原生演进之路
java·开发语言·jvm
zyq~3 分钟前
【课堂笔记】标签传播算法Label Propagation Algorithm(LPA)
人工智能·笔记·算法·机器学习·概率论·lpa·半监督学习
Xyz_Overlord9 分钟前
机器学习——集成学习
人工智能·机器学习·集成学习
北渔。12 分钟前
【2025.06】jupyter notebook 7+ 新手安装、配置、扩展应用(windows篇)
ide·windows·python·jupyter
白熊18812 分钟前
【机器学习基础】机器学习入门核心算法:多分类与多标签分类算法
算法·机器学习·分类
yunvwugua__13 分钟前
Python训练营打卡 Day43
开发语言·python
24毕业生从零开始学ai17 分钟前
探秘集成学习:从基础概念到实战应用
人工智能·机器学习·集成学习
g5zhu589618 分钟前
neo4j 5.19.0两种基于向量进行相似度查询的方式
开发语言·python
FanfanPyt19 分钟前
Python打卡训练营学习记录Day41
python·深度学习·学习
struggle202522 分钟前
LazyOwn RedTeam/APT 框架是第一个具有人工智能驱动的 C&C 的 RedTeam 框架
c语言·开发语言·python·html·powershell