Beancount

义项:复式记账工具
Beancount

Beancount 是一款开源的复式记账工具,由 Martin Blais 于 2007 年前后创建,其核心特点是以纯文本文件而非专有数据库保存财务记录。它定义了一套描述交易记录的文本语言,读取后可在内存中生成资产负债表、损益表等报表,并提供类 SQL 的查询语言与网页界面。由于数据以普通文本形式存在,账本便于用版本控制工具追踪修改,也便于长期保存和迁移。

目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

Beancount 是一套使用文本文件作为输入的双式记账系统,也是一种用于描述财务交易的记账计算机语言[1][2]。使用者在文本文件中按既定语法书写交易记录,程序将其读入内存,再据此生成资产负债表、损益表等多种报表[1]。

账本文件通常扩展名为 .beancount,除交易本身外还可包含开设账户、定义币种、记录价格与余额断言等指令[3]。它由 Martin Blais 以 Python 编写并开源发布,采用 GNU GPLv2 许可[4]。它属于纯文本记账(plain text accounting)工具一类,与 Ledger、hledger 属于同一工具家族。

原理

Beancount 遵循复式记账的基本规则:一笔交易由若干条分录组成,各条分录金额之和必须为零[5]。例如一笔刷信用卡买菜的支出,会同时记入费用账户与负债账户,贷方金额与借方金额相抵;日后还款时只在资产与负债账户之间划转,不会把同一笔开销重复计入支出[3]。

账户名称以冒号分隔的层级方式组织,并以账户类型作为前缀,共分资产、负债、收入、费用与权益五类[5]。程序解析账本后逐一检查每笔交易是否平衡,若有金额缺失或配平错误会直接报错[5]。用数学形式表示,设资产、负债、权益、费用、收入各类分录金额之和分别为 $A$、$L$、$E$、$X$、$I$,则恒有 $A + L + E + X + I = 0$[5]。

报表由交易流经若干变换生成:先对收入与费用账户做结转(clearing),把累计余额转入权益账户,再对交易序列做汇总与截断,即可得到任意时点的资产负债表或某一期间的损益表[5]。内置的类 SQL 查询语言 BQL 允许按账户、日期、标签等条件筛选并汇总分录,例如按账户分组求和即可得到试算表[6][5]。

发展历程

Beancount 由 Martin Blais 在 2007 年前后开始开发,最初的设计意图是做到与 Ledger 相似并部分兼容[4]。这一分支后来被称为第 1 版,其开发工作于 2013 年停止[4]。

第 2 版是对初版的彻底重写,引入了新的语法和一系列约束规则,自 2020 年 7 月起进入维护状态,此后被冻结并标注为过时[4][7]。第 3 版自 2024 年 6 月起成为当前稳定版本,相比第 2 版做了精简,原来随主程序一并分发的多数辅助工具被拆分为独立项目,价格获取等模块也迁出为单独仓库[4]。

早期 Beancount 自成一体,价格抓取等功能包含在主项目中;随着版本演进,社区形成了导入器、插件、网页界面等一系列围绕核心的独立工程[8]。截至 2024 年,项目版权由 Martin Blais 持有,代码以 GNU GPLv2 发布[4]。

应用

Beancount 常见于个人与家庭的财务管理,用于记录日常收支、信用卡账单、房租、工资与投资账户的变化,并可按月、季度或年度比较支出结构[9]。使用者可利用余额断言指令,把账本中某个账户的余额与银行对账单核对,从而发现漏记或重复记录[9]。

在投资与多币种场景中,它支持记录持仓数量、成本基础与价格,可用于追踪股票、基金、加密货币和房产等资产,并计算资本利得[6]。账本可以拆分为多个文件,由主文件包含,便于按年份或用途组织[3]。

由于格式为纯文本,账本可与 Git 等版本控制系统配合使用,每次提交形成可逐行审阅的差异记录,便于多人协作与事后追溯[3]。社区还提供了针对各类银行导出的导入脚本,以及 Fava 这一网页界面,将文本账本渲染为可交互的报表与图表[3][10]。此外还有数据库、命令行工具等多种扩展形式[2]。

局限

Beancount 要求账户必须显式声明,且每笔交易都必须配平,规则比 hledger 等宽松工具更为严格,新用户上手时录入成本较高[11]。它本身不提供图形化录入界面,主要依靠文本编辑器编写账本,日常记账需要一定的文本编辑习惯[11]。

核心程序基于 Python,运行需要相应的解释器环境,在处理体量极大的账本时性能不如以编译型语言实现的工具[11]。它也不自带银行直连能力,导入外部数据需要自行编写或选用导入器把 CSV、OFX 等格式转换为账本语法[9]。

内置报表以命令行输出为主,其网页界面 Fava 本身不带身份验证机制,直接对外暴露存在安全风险,需要自行配置访问控制[10]。此外,第 1 版与第 2 版均已停止维护,跨版本升级时账本与插件的兼容性需要另行处理[4]。

参见

  • Ledger —— 早期的命令行复式记账工具,Beancount 的设计部分受其启发。

  • hledger —— 同属纯文本记账工具家族,支持从命令行生成多种报表。

  • Fava —— 面向 Beancount 账本的网页界面,提供图表与查询功能。

  • 复式记账 —— Beancount 所遵循的记账方法,要求每笔交易借贷两方金额相等。

  • Git —— 分布式版本控制系统,常用于追踪账本文件的修改历史。

  • 纯文本记账 —— 以文本文件保存账目的一类记账方式的统称。

参考资料

  1. pypi.org 上的网页 [引用日期2026-10-14]
  2. Package: python3-beancount (3.2.0-2 and others) [引用日期2026-10-14]
  3. 透明且可审计的会计 [引用日期2026-10-14]
  4. beancount [引用日期2026-10-14]
  5. The Double-Entry Counting Method [引用日期2026-10-14]
  6. 帮助中心 [引用日期2026-10-14]
  7. GitHub - dnicolodi/beancount: Official Beancount repository [引用日期2026-10-14]
  8. msg00449 [引用日期2026-10-14]
  9. industry-specific-setups [引用日期2026-10-14]
  10. cloudimg1647283583153 [引用日期2026-10-14]
  11. beancount-vs-hledger [引用日期2026-10-14]
词条评价
词条统计

浏览次数:1 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T18:40:31Z

历史版本

本条目引用的词条
Ledger hledger Git Fava 复式记账 纯文本记账