安装 Beancount(C++ 版本)
Martin Blais - 2020 年 7 月
http://furius.ca/beancount/doc/v3-install
在您的计算机上下载并运行 Beancount v3(开发中版本)的说明。如需安装 v2 版本,请参阅此文档:Beancount - 安装(v2)
| 本文介绍的是 Beancount v3,这是一个实验性的开发版本(截至 2020 年 7 月);有关稳定版本(Beancount v2)的构建说明,请参阅另一份文档。 |
设置 Python
运行程序仍需 Python 依赖项。
pip install –r requirements/dev.txt
使用 Bazel 构建
警告:这是一个实验性的开发分支,不要期望所有功能都完美无缺。
Bazel 依赖项
Beancount v3 使用 Bazel 构建系统,该系统在很大程度上使您无需关心本地安装和计算机上的依赖项。
需要安装的依赖项包括:
-
Bazel 本身。 请遵循 https://bazel.build/ 上的说明
-
C++ 编译器。 g++ 或 clang 均可使用,我使用的是 clang-11。
-
Python 运行时(版本 3.8 或更高)。请从您的发行版中安装。
Bazel 将自行下载并编译其所需的所有库(包括代码生成器,例如 Bison),并以构建文件中指定的确切版本进行构建,因此您无需担心这些依赖项。
构建与测试
只需运行以下命令:
bazel build //bin:all
目前没有安装脚本,您必须从源码运行。您可以使用以下命令运行单个程序(例如 bean-check):
bazel run //bin:bean_check -- /path/to/ledger.beancount
或者,如果您不关心自动重建修改过的代码,可以这样运行:
./bazel-bin/bin/bean_check /path/to/ledger.beancount
开发
您可以这样运行所有单元测试:
bazel test //...
由于 Bazel 详细记录了所有依赖项,修改代码后重新运行此命令只会重新测试受影响的目标;这使得带有测试的迭代开发更加有趣。
另一个优势是,由于构建所依赖的所有库都会被下载和构建,虽然首次构建可能较慢,但我们可以使用我们所依赖代码的最新版本。
目标在各自目录的 BUILD 文件中定义。所有构建规则均可在 //third_party 下找到。
数据导入
数据导入代码涉及导入位于仓库外部的代码。Bazel 二进制文件是自包含的,若未将模块声明为依赖项,则无法导入,因此运行 //bin:bean_extract 目标可能无法正常工作。
目前这还不可行(除非将你的导入配置构建为一个显式链接 Beancount 的 py_binary() 目标)。通过定义一个从外部获取规则的合适 WORKSPACE 文件,无需编写大量 Bazel 代码即可实现。我尚未提供此示例(待定)。
作为变通方案,你可以将 PYTHONPATH 设置为从源码位置导入,并提前创建指向解析器 .so 文件的符号链接。你可以这样操作:
make bazel-link
待定
还有一些构建集成任务待完成:
-
尚未支持 pytype。
-
pylint 也未集成到构建流程中。
使用 meson 进行开发安装
注意:本节内容基于以下讨论更新:https://groups.google.com/g/beancount/c/7ppbyz_5B5w
Beancount v3 的 Bazel 构建包含一些实验性 C++ 代码,截至撰写时(2024 年 3 月 9 日),这些代码仅用于技术演示。在“生产”环境中,v3 使用 meson-python 构建扩展模块并打包为 Python wheel,这正是 pip 安装时所使用的机制。
本节描述的是为开发 Beancount v3 Python 代码而进行的安装流程,而非用于实验 C++ 代码。
在 Linux 上
已在 Ubuntu 上使用 Python 3.12 测试通过
相关链接
https://mesonbuild.com/meson-python/how-to-guides/editable-installs.html
git clone https://github.com/beancount/beancount.git
创建并激活虚拟环境
python3.12 -m venv beancount/venv
. beancount/venv/bin/activate
cd beancount
安装所需包。
python -m pip install meson-python meson ninja
以可编辑模式安装 Beancount,并禁用构建隔离
python -m pip install --no-build-isolation --editable .
注意:有观点认为无需使用 --no-build-isolation 选项,但也有人提到不使用该选项时安装会失败。此外,文档建议需要此选项。具体是否需要可能取决于 Linux 环境类型。
安装 pytest
python -m pip install pytest
运行测试,确保一切正常:
pytest --import-mode=importlib beancount/
在 Windows 上
已在 64 位 Windows 10 专业版上测试通过
前提条件
安装 Microsoft Visual Studio(已测试版本 2022)
操作步骤
git clone https://github.com/beancount/beancount.git
cd beancount
若运行的是 x64 位 Windows,请启动 "x64 原生工具命令提示符(VS 20XX)"。方法为:按下并释放 Windows 键,然后输入 x64

打开此提示
进入 beancount 的安装目录
C:\Program Files\Microsoft Visual Studio\2022\Community>cd C:\_code\t\beancount
C:\_code\t\beancount>
激活虚拟环境
C:\_code\t\beancount>venv\Scripts\Activate
(venv) C:\_code\t\beancount>
安装所需包
(venv) C:\_code\t\beancount>py -m pip install meson-python meson ninja
以可编辑模式安装 beancount。与 Linux 不同,Windows 上的 --no-build-isolation 一方面会引发一些错误,但另一方面似乎并不必要
(venv) C:\_code\t\beancount> py -m pip install --editable .
安装 pytest
(venv) C:\_code\t\beancount>py -m pip install pytest
运行测试
(venv) C:\_code\t\beancount>pytest --import-mode=importlib beancount
注意:Windows 上的部分测试会失败,但这是由于一般的可移植性问题