Beancount经常让人感到沮丧的事情,除了全英文的说明书和复式记账原则之外,就是配置他的工作环境。由于Beancount主要使用Python作为开发语言,而Python在依赖管理方面是出了名的糟糕(慢慢在变好),然而对于单纯想通过Beancount了解自己财务状况的朋友来说,简直就是一场灾难。

在摸索了一段时间之后,我找了适合自己的环境配置方案,希望这篇文章,对你有所帮助。

选择账本存储的位置

我有时需要在两台不同的设备上编辑自己的账本,有些朋友会通过GitHub来作为账本的“中央存储”,然后分别在设备上Pull下来,更改完成再Push到中央仓库去。

不过结合自己的实际情况,我认为像OneDrive,坚果云,Dropbox这样的云存储可能更简单易用,我自己将账本存在Dropbox中。

保护你的账本

我认为记账是很隐私的一件事,通过浏览账本内容,几乎可以还原当时的所有主要活动。所以在把账本存储到第三方之前,多一层加密是极好的。

Cryptomator开源,免费,如果你也有这类需求,不妨试一试。

账本编辑工具:VS Code

VS Code有一个非常好用的Beancount插件加持,通过拼音首字母快速填充受款商户(Payee)(交易描述)Narration时能让自己在平时记账时省不少事儿。而且正如我上一篇提到的Snippet功能,也是使用VS Code实现的,接下来我们要配置的Python环境,也需要使用的VS Code中的这个插件。

Python和账本分离

VS Code中的Beancount插件可以指定Python的位置,推荐设置在工作区级别上。
An image to describe post

对插件进行设置时,VS Code可以在用户级别设置(User)也可以在工作区级别设置(Workspace)

工作区级别的设置总是会覆盖用户级别的配置

就像我前面提到的,我有在两台设备上进行记账的需求,Dropbox这样的云存储已经解决了放在哪里的问题,接下来就是分别在设备上设置好记账所需的环境和组件。

VS Code的配置也是可以同步的,为了保持一致性,我会分别在两台设备上的同样路径创建相同的目录:~/beanshop,这个目录专门用来配置记账的环境,这个目录存放着Python的解释器,Beancount软件包,Fava软件包,以及未来可能会用到的插件。

用虚拟环境保持最大一致性

对Python依赖管理不熟悉,会让我们在遇到Module Not Found的时候无比沮丧:
An image to describe post

使用虚拟环境,管理Python安装的各种软件包,是目前我认为理解起来最容易,也最方便管理的方法。

创建虚拟环境,安装Beancount,Fava和其他插件,我使用uv

cd ~/beanshop #进入记账专用目录
uv venv #创建虚拟环境
source .venv/bin/activate #激活虚拟环境
uv pip install beancount #安装beancout
uv pip install fava

Streamlit最近有一篇Blog,介绍了他们从pip切换到uv之后的变化:pip vs. uv: How Streamlit Cloud sped up app load times by 55%

除了uv之外,还有许多其他优秀的依赖管理程序,比如@FrostMing的项目PDM,选择一个自己喜欢的就可以。

关于Python的环境管理和依赖管理,两篇文章推荐给对这方面感兴趣的朋友:

确认环境配置正确

在VS Code的Beancout插件中,正确配置Main Bean FilePython3 Path
An image to describe post

如果你勾选了Run Fava On Activate,并且也在虚拟环境中安装了fava,那么你需要配置Fava Path
为了不和macOS上的端口出现冲突,可以使用 -p选项设置其他端口。
An image to describe post

一切设置好后,就可以开始记录了,如果发觉Beancout插件不生效(比如不能自动提示Account信息,不能自动填充今天的日期等)可以在OUTPUT页选择Beancout查看插件的输出日志,定位问题。

An image to describe post

到这里,记账的环境全部配置好了,开始坚持记录吧!


Beancount Magazine | Beancount 杂志系列是关于使用Beancount记录个人财务的自我实践,分享自己对管理,理解个人财务状况和记账的想法。

如果你也对这些主题感兴趣,不妨订阅试试看,希望能这些内容能对你有帮助😁