一个可视化的桌面工具,用于在外网环境下载 Dify 插件并打包为离线版本,然后在内网环境导入到 Dify 服务器中。
- 🔍 插件市场浏览 - 搜索和浏览 Dify Marketplace 上的所有插件
- 📦 离线打包 - 将插件重新打包为离线可用版本(预下载所有 Python 依赖)
- 🚀 一键导入 - 将离线插件包批量导入到内网 Dify 服务器
- 🖥️ 可视化界面 - 现代化的 Web GUI,操作简单直观
- 🔄 跨平台支持 - 支持 Linux / macOS / Windows
- 📡 双认证模式 - 支持 Console API 和 Plugin Daemon API 两种认证方式
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ 外网环境 │ │ 数据传输 │ │ 内网环境 │
│ │ │ │ │ │
│ 1. 浏览插件市场 │────▶│ 2. 导出离线包 │────▶│ 3. 导入到内网Dify│
│ 下载插件 │ │ .difypkg │ │ 服务器 │
│ 4. 离线打包 │ │ │ │ │
└─────────────────┘ └──────────────────┘ └─────────────────┘
# 1. 克隆项目
git clone https://github.com/yourname/dify-plugin-tool.git
cd dify-plugin-tool
# 2. 安装依赖
pip install -r requirements.txt
# 3. 启动工具
python start.py
# 工具将在 http://127.0.0.1:5678 启动,并自动打开浏览器# 安装 pywebview
pip install pywebview
# 启动桌面应用
python start.py --desktop# 安装 PyInstaller
pip install pyinstaller
# 打包
pyinstaller --onefile --name "DifyPluginTool" \
--add-data "templates:templates" \
--add-data "static:static" \
--hidden-import=core.plugin_tool \
start.py
# 生成的可执行文件在 dist/ 目录下- 启动工具后,进入 「插件市场」 页面
- 搜索需要的插件,点击下载按钮
- 下载的插件保存在临时目录中
- 进入 「离线打包」 页面
- 选择已下载的插件(或上传本地的 .difypkg 文件)
- 配置目标平台(如内网服务器是 Linux x86_64)
- 选择合适的 PyPI 镜像源加速下载
- 点击 「开始离线打包」
- 打包完成后,离线插件包保存在导出目录中
将导出目录中的 .difypkg 文件通过安全通道(U盘、堡垒机等)传输到内网环境。
- 在内网电脑上启动工具
- 进入 「导入部署」 页面
- 配置内网 Dify 服务器的地址和认证信息
- 测试连接成功后,选择要导入的离线插件包
- 点击 「批量导入到目标服务器」
- 服务器地址: Dify 控制台的地址,如
http://192.168.1.100:80 - API Token: 在浏览器中登录 Dify 控制台,打开开发者工具(F12),在 Network 面板中找到任意请求,复制
Authorization请求头中的 Bearer Token
- 服务器地址: Plugin Daemon 的地址,通常与 Dify API 相同
- Server Key: Dify 环境变量
PLUGIN_DAEMON_SERVER_KEY的值
本工具的核心原理参考了 dify-plugin-repackaging 项目:
- 解压 .difypkg - 插件包本质是 ZIP 格式
- 下载 Python 依赖 - 使用
pip download将所有依赖下载为 .whl 文件 - 内嵌 wheel 包 - 将下载的 wheel 文件放入
wheels/目录 - 修改 requirements.txt - 添加
--no-index --find-links=./wheels/实现离线安装 - 重新打包 - 将修改后的内容重新打包为 .difypkg
- 签名验证: 内网 Dify 服务器需要设置
FORCE_VERIFYING_SIGNATURE=false才能安装重新打包的插件 - 包大小限制: 如果插件包较大,需要调整 Dify 的
PLUGIN_MAX_PACKAGE_SIZE和 Nginx 的NGINX_CLIENT_MAX_BODY_SIZE - Python 版本: Dify 插件运行时使用 Python 3.12,跨平台打包时工具会自动指定 Python 3.12
- uv 工具: 推荐安装 uv 以获得更好的依赖处理能力
- 后端: Python + Flask
- 前端: HTML/CSS/JavaScript (原生)
- 桌面模式: PyWebView (可选)
- 打包工具: PyInstaller (可选)
python start.py [OPTIONS]
选项:
--host TEXT 监听地址 (默认: 127.0.0.1)
--port INTEGER 监听端口 (默认: 5678)
--debug 启用调试模式
--no-browser 不自动打开浏览器
--desktop 桌面应用模式 (需要 pywebview)
dify-plugin-tool/
├── app.py # Flask Web 后端
├── start.py # 启动入口
├── requirements.txt # Python 依赖
├── core/
│ └── plugin_tool.py # 核心业务逻辑
├── templates/
│ └── index.html # 前端页面
├── static/
│ ├── css/
│ │ └── style.css # 样式文件
│ └── js/
│ └── app.js # 前端逻辑
└── README.md # 项目文档
- dify-plugin-repackaging - 离线打包核心思路参考
- Dify - 开源 LLM 应用开发平台
- dify-plugin-offline-packager - 另一个离线打包工具
MIT License