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 能够实现语法着色、账户自动补全、数字按小数点对齐、错误提示等,提高记账效率。