beancount 是用 python 写的。装好 python 后,Windows 下包命令安装。

安装软件

pip3 方式安装

# 直接安装 beancount
pip3 install beancount
# 或者安装 fava 自动安装 beancount
pip3 install fava
fava main.bean --host 0.0.0.0

docker方式安装

version: "3.8"
services:
  # fava
  fava:
    image: yegle/fava:v1.30
    container_name: fava
    restart: always
    ports:
      - 8052:5000
    volumes:
      - ${APP_DATA}/fava:/bean
    environment:
      - TZ=Asia/Shanghai
      - BEANCOUNT_FILE=/bean/main.bean
# VARIABLE=value #comment
WEB_ROOT=/var/www/html
APP_DATA=/mnt/storage/docker/data

初始设置

beancount 支持将帐分写在多个 .bean 文件内,于是可以当成一个项目用 git 管理。例如统一放到 my_accounting 文件夹中:

my_accounting/
|- README.md
|- main.bean
`- books/
   |- 2025-08.bean
   `- 2025-09.bean

此例从 2025 年 8 月开始用 beancount 记账,每个文件记一个月的帐,另外 main.bean:导入所有其它文件,方便后续统计图示。

;==main.bean文件==
;【一、账本设置】
option "title" "我的账本"
option "operating_currency" "CNY" 

;【二、账户设置】
;1、开设账户
1990-01-01 open Assets:Card:CMB4899 CNY, USD ;资产账户, 尾号4899的银行卡,支持CNY和USD
1990-01-01 open Assets:Card:Metro0097 CNY ;资产账户, 尾号0097深圳通交通卡
1990-01-01 open Income:Salary CNY ;收入账户, 工资收入
1990-01-01 open Expenses:Traffic:Metro CNY ;支出账户, 地铁消费
1990-01-01 open Liabilities:Loan:Mortgage CNY  ; 负债账户, 抵押贷款
1990-01-01 open Equity:OpenBalance ;权益账户;用于账户初始化,支持任意货币
;2、账户初始化
1990-01-01 * "" "银行卡初始余额"
    Assets:Card:CMB4899          10000.00 CNY
    Equity:OpenBalance          -10000.00 CNY
1990-01-01 * "" "深圳通初始余额"
    Assets:Card:Metro0097        82.20 CNY
    Equity:OpenBalance          -82.20 CNY
1990-01-01 * "" "房贷初始化"
    Liabilities:Loan:Mortgage   -1000000.00 CNY
    Equity:OpenBalance           1000000.00 CNY

;【三、交易记录】
include "books/2025-08.bean" ;历史账本合集
;==2025-08.bean文件==
2025-08-01 * "上班地铁"
    Expenses:Traffic:Metro         4.75 CNY
    Assets:Card:Metro0097         -4.75 CNY

2025-08-19 * "房贷还款2508"
    Liabilities:Loan:Mortgage      6000.00 CNY    ; 还贷,减少负债
    Assets:Card:CMB4899           -6000.00 CNY    ; 银行扣款

定义账号

账户名只有一个限制:顶层只能用 beancount 预定义的五个之一。

  • 资产(Assets):现金、储蓄卡余额、支付宝余额、股票账户余额、房子、车子、应收款等。
  • 收入(Income):工资、补贴、利息、利是、投资收益等。
  • 支出(Expenses):衣、食、住、行等。
  • 负债(Liabilities):信用卡欠款、房贷、车贷、应付款等。
  • 权益(Equity):这个账户比较特殊,在账户初始化、误差处理等少数场合使用。

交易明细

交易明细的记录格式。如下:

# 格式
日期 * "交易方" "交易备注"
    账户   金额 货币
# 示例:
2025-08-01 * "上班地铁"
    Assets:Card:Metro0097         -4.75 CNY

其中

* 号表示这笔交易是确定的,没有疑问。若是 ! 号,表示存疑,但一般用不上。

交易方和交易备注,均可省略。

货币必须与账户设置中对应的货币类型一致。比如账户设置为美元账户,消费时出现人民币,Beancount 会报错。

此外,账户后的金额是带有符号的,如下:

  • 支出账户:一般为正数。表示花费多少钱。
  • 收入账户:一般为负数。表示收入多少钱。投资收入账户可能出现正数,则表示投资亏损。
  • 资产账户:可正可负。正数表示有钱存入,余额增加;负数表示有钱转出,余额减少。
  • 负债账户:可正可负。正数表示还款,负债减少;负数表示借款,负债增加。

支出为正,收入为负,有点反直觉,是会计恒等式逻辑所致。会计恒等式具体表述如下:

(Assets + Expenses) + (Liabilities + Income) + Equity = 0

辅助工具

VS Code 插件 Beancount 能够实现语法着色、账户自动补全、数字按小数点对齐、错误提示等,提高记账效率。