跳到主要内容

1 篇博文 含有标签「模块化架构」

查看所有标签

Beancount v3:有哪些新变化?

· 阅读需 5 分钟
Mike Thrift
Mike Thrift
Marketing Manager

Beancount 版本 3 于 2024 年年中发布,标志着这款流行的纯文本会计工具在架构上的重大演进。尽管它保持了用户账本文件的向后兼容性,但其底层结构和配套工具都经历了实质性变化。以下是 Beancount v3 的新特性一览。

更模块化、更精简的架构

Beancount v3:有哪些新变化?

Beancount v3 最显著的变化是转向了更模块化的生态系统。以前与核心捆绑在一起的几个关键功能已被拆分到独立的、独立的项目中。这使得 Beancount 的核心更加精简,并允许对各个组件进行更集中的开发。

现在作为独立包的关键组件包括:

  • beanquery:用于账本文件的强大类 SQL 查询工具现在已成为一个独立的包。
  • beangulp:这是数据导入框架的新家,取代了之前的 beancount.ingest 模块。
  • beanprice:一个专门用于获取商品和股票价格的工具。

这种分离意味着用户除了安装 beancount 本身之外,还需要安装这些独立的包,以保留他们在版本 2 中习惯的全部功能。

命令行工具和工作流程的变化

为了反映新的模块化架构,命令行工具发生了一些显著变化:

  • bean-report 已移除:此工具已被移除。现在鼓励用户使用 bean-query(来自 beanquery 包)来满足其报告需求。
  • 新的导入器工作流程bean-extractbean-identify 命令已从核心中移除。beangulp 的新方法是基于脚本的。用户现在将创建自己的 Python 脚本来处理从银行对账单等外部来源导入数据。

语法和功能增强

虽然核心会计原则保持不变,但 Beancount v3 在其语法中引入了一些受欢迎的灵活性:

  • 更灵活的货币代码:以前对货币名称长度和字符的限制已放宽。现在支持单字符货币符号。
  • 扩展的交易标志:用户现在可以使用 A 到 Z 的任何大写字母作为交易的标志,从而实现更精细的分类。

重要的是,这些更改是向后兼容的,因此您现有的 Beancount v2 账本文件无需任何修改即可使用。

C++ 重写与性能

Beancount 的长期目标之一是使用 C++ 重写其性能关键组件。虽然这项工作仍在进行中,但 Beancount v3 的初始版本包含基于 C++ 的核心。这意味着目前 v3 的性能与 v2 相当。C++ 代码仍保留在单独的开发分支中,以供将来集成。

从 v2 迁移到 v3

对于大多数用户而言,从 Beancount v2 迁移到 v3 相对简单:

  1. 账本文件:您的 .beancount 文件无需任何更改。
  2. 安装:您需要使用 pip 安装新的独立包,例如 beanquerybeangulp
  3. 导入器脚本:如果您有自定义导入器,则需要更新它们以使用新的 beangulp API。这主要涉及更改导入器继承的基类并调整一些方法签名。
  4. Fava:Beancount 流行的网页界面 Fava 已更新以兼容 v3。请确保您拥有最新版本的 Fava 以获得无缝体验。

本质上,Beancount v3 是一个基础版本,它简化了项目的架构,使其在长期内更具模块化,更易于维护和扩展。虽然它需要对用户工作流程进行一些调整,尤其是在数据导入方面,但它为这款强大的会计工具的未来发展奠定了基础。