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 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首次创建-