bench 是什么
一句话总结
bench 是 Frappe 框架的命令行工具,用来管理站点、App、数据库等所有操作,是 Frappe 世界的全能遥控器。
🤔 为什么会有它 / 解决了什么问题
Frappe 是一个元框架(用来构建框架的框架),它的运行单元是”站点”和”App”,不是单文件。需要一个 CLI 来统一管理 bench init、site create、app install、migration、backup 等复杂操作。
🔍 具体原理 / 运作逻辑
bench 本质上是一个 Python CLI(Click 实现),包裹了 frappe.utils 和子进程调用。它操作 bench 目录(含 apps、sites、env、config 等子目录),每个命令对应一个 Python 模块。
更硬核的技术细节(点击展开)
bench 目录下的
sites/包含所有站点的site_config.json和文件存储;env/是独立 Python 虚拟环境;apps/是所有安装的 Frappe App 源码。bench 命令通过--site参数指定操作哪个站点。
🧭 什么情况下会用到 / 什么场景会遇到它
- 创建新站点:
bench new-site site1.com - 安装/卸载 App:
bench --site site1.com install-app erpnext - 执行任意 Frappe 代码:
bench --site site1.com execute "print(frappe.db.get_value(...))" - 备份/恢复:
bench --site site1.com backup
🛠️ 怎么上手 / 在哪操作
在 Press 容器的 bench 目录(/home/frappe/frappe-bench)下用 bench --site <site_name> <command>;v16 容器里 Python 版本多,需注意用 python3.14 而不是 python3。
⚖️ 副作用 / 代价 / 取舍
bench 封装较厚,简单操作背后可能跑 migration 或 build,耗时不可预期。bench --site xxx execute 只接受单表达式,不能直接跑多行 Python 脚本。
🕰️ 来历
- 谁提出/创造的:Frappe 框架核心团队(Frappe Technologies Pvt. Ltd.)
- 什么时候出现的:2014 年左右随 Frappe Framework 开源一起发布
🔗 关联 / 经常一起出现的概念
- Frappe:bench 是被管理的框架本体
- Press:Press 通过 Agent 远程调用 bench 命令来管理站点
⚠️ 注意事项 / 常见误区
把 bench execute 当普通 Python 解释器用——它只能 eval 单表达式,不支持 import 语句。多行逻辑必须 pipe 进 bench console。
📎 记忆锚点
bench 之于 Frappe 就像 apt 之于 Debian——你几乎不会直接用底层工具,所有日常操作都通过它。
📝 更新日志
| 日期 | 改动 | 原因 |
|---|---|---|
| 2026-07-13 | 首次创建 | - |