Beancount v3:有哪些新变化?
Beancount 版本 3 于 2024 年年中发布,标志着这款流行的纯文本会计工具在架构上的重大演进。尽管它保持了用户账本文件的向后兼容性,但其底层结构和配套工具都经历了实质性变化。以下是 Beancount v3 的新特性一览。
更模块化、更精简的架构
Beancount v3 最显著的变化是转向了更模块化的生态系统。以前与核心捆绑在一起的几个关键功能已被拆分到独立的、独立的项目中。这使得 Beancount 的核心更加精简,并允许对各个组件进行更集中的开发。
现在作为独立包的关键组件包括:
- beanquery:用于账本文件的强大类 SQL 查询工具现在已成为一个独立的包。
- beangulp:这是数据导入框架的新家,取代了之前的
beancount.ingest
模块。 - beanprice:一个专门用于获取商品和股票价格的工具。
这种分离意味着用户除了安装 beancount
本身之外,还需要安装这些独立的包,以保留他们在版本 2 中习惯的全部功能。
命令行工具和工作流程的变化
为了反映新的模块化架构,命令行工具发生了一些显著变化:
bean-report
已移除:此工具已被移除。现在鼓励用户使用bean-query
(来自beanquery
包)来满足其报告需求。- 新的导入器工作流程:
bean-extract
和bean-identify
命令已从核心中移除。beangulp
的新方法是基于脚本的。用户现在将创建自己的 Python 脚本来处理从银行对账单等外部来源导入数据。
语法和功能增强
虽然核心会计原 则保持不变,但 Beancount v3 在其语法中引入了一些受欢迎的灵活性:
- 更灵活的货币代码:以前对货币名称长度和字符的限制已放宽。现在支持单字符货币符号。
- 扩展的交易标志:用户现在可以使用 A 到 Z 的任何大写字母作为交易的标志,从而实现更精细的分类。
重要的是,这些更改是向后兼容的,因此您现有的 Beancount v2 账本文件无需任何修改即可使用。
C++ 重写与性能
Beancount 的长期目标之一是使用 C++ 重写其性能关键组件。虽然这项工作仍在进行中,但 Beancount v3 的初始版本不包含基于 C++ 的核心。这意味着目前 v3 的性能与 v2 相当。C++ 代码仍保留在单独的开发分支中,以供将来集成。
从 v2 迁移到 v3
对于大多数用户而言,从 Beancount v2 迁移到 v3 相对简单:
- 账本文件:您的
.beancount
文件无需任何更改。 - 安装:您需要使用
pip
安装新的独立包,例如beanquery
和beangulp
。 - 导入器脚本:如果您有自定义导入器,则需要更新它们以使用新的
beangulp
API。这主要涉及更改导入器继承的基类并调整一些方法签名。 - Fava:Beancount 流行的网页界面 Fava 已更新以兼容 v3。请确保您拥有最新版本的 Fava 以获得无缝体验。
本质上,Beancount v3 是一个基础版本,它简化了项目的架构,使其在长期内更具模块化,更易于维护和扩展。虽然它需要对用户工作流程进行一些调整,尤其是在数据导入方面,但它为这款强大的会计工具的未来发展奠定了基础。