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的位置,推荐设置在工作区级别上。
对插件进行设置时,VS Code可以在用户级别设置(User)也可以在工作区级别设置(Workspace)
工作区级别的设置总是会覆盖用户级别的配置
就像我前面提到的,我有在两台设备上进行记账的需求,Dropbox这样的云存储已经解决了放在哪里的问题,接下来就是分别在设备上设置好记账所需的环境和组件。
VS Code的配置也是可以同步的,为了保持一致性,我会分别在两台设备上的同样路径创建相同的目录:~/beanshop
,这个目录专门用来配置记账的环境,这个目录存放着Python的解释器,Beancount软件包,Fava软件包,以及未来可能会用到的插件。
用虚拟环境保持最大一致性
对Python依赖管理不熟悉,会让我们在遇到Module Not Found
的时候无比沮丧:
使用虚拟环境,管理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的环境管理和依赖管理,两篇文章推荐给对这方面感兴趣的朋友:
- 你的 Python 包都装到哪了? ,即使你是Python程序员,也非常值得一读。
- How I manage Python in 2024 ,看了这篇文章才了解到mise,现在一直也在用。
确认环境配置正确
在VS Code的Beancout插件中,正确配置Main Bean File
,Python3 Path
如果你勾选了Run Fava On Activate
,并且也在虚拟环境中安装了fava,那么你需要配置Fava Path
。
为了不和macOS上的端口出现冲突,可以使用 -p
选项设置其他端口。
一切设置好后,就可以开始记录了,如果发觉Beancout插件不生效(比如不能自动提示Account信息,不能自动填充今天的日期等)可以在OUTPUT
页选择Beancout
查看插件的输出日志,定位问题。
到这里,记账的环境全部配置好了,开始坚持记录吧!
Beancount Magazine | Beancount 杂志系列是关于使用Beancount记录个人财务的自我实践,分享自己对管理,理解个人财务状况和记账的想法。
如果你也对这些主题感兴趣,不妨订阅试试看,希望能这些内容能对你有帮助😁