关于 Ledger
Ledger 是一个强大的复式簿记工具,将账目数据存储为纯文本格式的日记账。支持多种查询和分析命令,可以快速生成余额表、交易明细、预算报告等财务报表。
主要功能
- 01维护纯文本格式的复式簿记账本
- 02通过 balance、register 等命令快速查询账户状态
- 03支持脚本化的自动化财务报告生成
适用场景
- 01管理个人或项目的财务记录和账目追踪
- 02自动化定期财务报告和对账工作
- 03与版本控制系统集成进行账目版本管理
安装
选择你的系统或包管理器,复制命令到终端运行。
安装完成后运行ledger --version确认安装成功。
命令示例
常用命令按使用顺序排列。
详细介绍
Ledger:命令行会计
Ledger 是一款功能强大的复式记账系统,可通过 UNIX 命令行访问。由于没有炫酷的 UI,这可能会让一些用户望而却步;但对于希望以无与伦比的方式访问数据并生成报告的用户来说,几乎没有其他选择。
Ledger 使用文本文件作为输入。它读取文件并生成报告;没有其他数据库或存储状态。使用 Ledger 时,你需要创建一个包含账户名称和交易记录的文件,然后从命令行运行程序,通过一些选项指定输入和所需的报告,并获取输出。输出通常是纯文本,不过也可以生成图表或 HTML。Ledger 的概念简单,功能却出乎意料地丰富,而且易于使用。
快速上手
我知道,你只想赶紧构建并试用。如果已安装所有依赖项,只需执行:
$ git clone [email protected]:ledger/ledger.git
$ cd ledger && ./acprep update # 更新到最新版本、配置并构建
现在试试第一条 ledger 命令:
$ ./ledger -f test/input/sample.dat reg
如需了解如何维护账簿,请参阅[文档]、[维基]以及本文件末尾的资源部分。 可在 ledger/ledger-mode repository 中找到适用于 Ledger 文件的 Emacs 模式,vim 插件则位于 ledger/vim-ledger repository。
Docker 版本
如果你的计算机或服务器上安装了 Docker,可以使用本软件的 Docker 版本,无需安装任何其他依赖项:
$ docker run --rm -v "$PWD"/test/input:/data dcycle/ledger:1 -f /data/sample.dat reg
依赖项
如果你想继续使用该软件,需要安装一些依赖项。
请注意,某些功能(例如 --import)要求构建 Ledger 时启用 Python 支持。
在你的平台上安装依赖项的最简便方法是运行以下 Python 脚本:
$ ./acprep dependencies
如果上述方法未能完全奏效,以下是构建当前 main 分支所需的依赖项:
| 依赖项 | 版本(或更高版本) |
|---|---|
| CMake | 3.16.2 |
| Boost | 1.72 |
| Gmp | 6.1.2 |
| Mpfr | 4.0.2 |
| utfcpp | 3.2.3 |
| ICU | 63 可选 |
| gettext | 0.17 可选 |
| libedit | 20090111-3.0 可选 |
| Python | 3.10 可选 |
| Gpgmepp | 1.13.1 可选 |
| doxygen | 1.9.5 可选,用于 make docs |
| graphviz | 2.20.3 可选,用于 make docs |
| texinfo | 4.13 可选,用于 make docs |
| lcov | 1.6 可选,用于 make report,与 ./acprep gcov 配合使用 |
| sloccount | 2.26 可选,用于 make sloc |
macOS
在 macOS 上,你可以使用 Homebrew 或 MacPorts 轻松安装 Ledger 的构建依赖项。
1. Homebrew
如果你使用 Homebrew,运行以下命令即可安装依赖项:
$ brew install cmake boost boost-python3 gmp mpfr
2. MacPorts
如果你像我一样在 macOS 上使用 MacPorts 构建软件,可以运行以下命令:
$ sudo port install -f cmake python37 \
libiconv zlib gmp \
mpfr ncurses ncursesw \
gettext libedit boost-jam \
boost +st+python37+icu texlive doxygen graphviz \
texinfo lcov sloccount
Conda
在某些平台(例如 linux-64)上,可以从 conda-forge 获取构建 Ledger 所需的依赖项,并通过 Conda 或 mamba 使用。
使用 Conda,可以运行:
$ conda install -c conda-forge python=3 cmake boost gmp mpfr \
gettext libedit texinfo doxygen graphviz
Ubuntu
如果要在 Ubuntu 上构建,请使用 sudo apt-get install ... 安装以下软件包(截至 Ubuntu 18.04):
$ sudo apt-get install build-essential cmake doxygen \
libboost-system-dev libboost-dev python3-dev gettext git \
libboost-date-time-dev libboost-filesystem-dev \
libboost-iostreams-dev libboost-python-dev libboost-regex-dev \
libboost-test-dev libedit-dev libgmp3-dev libmpfr-dev texinfo tzdata
Debian
Debian 10(bullseye)、Debian 11("bullseye")、Debian testing 和 Debian unstable(sid)均包含构建 ledger 所需的所有组件。可以使用以下命令安装所有必需的构建依赖项:
$ sudo apt-get install build-essential cmake autopoint texinfo python3-dev \
zlib1g-dev libbz2-dev libgmp3-dev gettext libmpfr-dev \
libboost-date-time-dev libboost-filesystem-dev \
libboost-graph-dev libboost-iostreams-dev \
libboost-python-dev libboost-regex-dev libboost-test-dev
Fedora
在 Fedora 下,可以使用以下命令安装所有必需的构建依赖项(已在 Fedora 32 上测试):
$ sudo dnf install boost-date-time boost-devel boost-filesystem \
boost-iostreams boost-python3-devel boost-regex boost-system \
boost-test cmake doxygen gettext git gmp-devel libedit-devel \
mpfr-devel python3-devel texinfo tzdata
构建
下一步是为构建准备环境。虽然你可以使用 cmake . 和 make,但我准备了一个脚本,可以为你完成更多繁琐工作:
$ ./acprep update
# 或者,如果你想使用后缀为 -mt 的 Boost 库,请安装到
# $HOME/local,并使用 2 个进程并行构建
$ ./acprep update --boost-suffix=-mt --prefix=$HOME/local -j2
如果配置步骤失败,请阅读 CMakeFiles/CMakeOutput.log 和
CMakeFiles/CMakeError.log 的内容。此外,请查看 acprep 的 help 子命令,其中介绍了它的许多选项。这基本上是我用于配置、构建和测试 Ledger 的唯一命令。
你可以运行 make check 确认结果,并运行 make install 进行安装。
Python 绑定
Ledger 包含使用 Boost.Python 构建的可选 Python 绑定。 Python 支持默认关闭,必须显式启用。
先决条件
除了标准依赖项之外,还需要:
- Python 3.10 或更高版本(包含开发头文件)
- Boost.Python(与 Boost 和 Python 版本匹配)
请参阅上文各平台对应的依赖项部分,了解软件包名称(例如,Homebrew 上的 boost-python3,Ubuntu 上的 libboost-python-dev)。
启用 Python 支持进行构建
使用 acprep:
$ ./acprep --python update --output=build
或直接使用 CMake:
$ mkdir build && cd build
$ cmake -DUSE_PYTHON=ON ..
$ make -j$(nproc)
安装 Python 模块
运行 make install(或 cmake --install build)会将 ledger.so(Windows 上为 ledger.pyd)复制到 Python 安装目录下的 site-packages 目录中。安装后:
$ python -c "import ledger; print(ledger)"
无需安装即可使用
若要在不安装的情况下直接使用构建目录中的模块,请将
PYTHONPATH 指向构建目录:
$ PYTHONPATH=build python -c "import ledger; print(ledger)"
在 Linux 上,可能还需要设置 LD_LIBRARY_PATH=build;在 macOS 上,
则需要设置 DYLD_LIBRARY_PATH=build。
python/demo.py 中附带了一个演示脚本:
$ PYTHONPATH=build python python/demo.py
有关 Python API 的完整文档,请参阅 Ledger 手册中的“使用 Python 扩展”章节。
资源
现在你已准备就绪,以下是一些值得留意的资源:
- [主页]
- [文档]
- IRC 频道:Libera Chat 上的 #ledger 频道
- 邮件列表 / 论坛
- GitHub 项目页面
- 代码分析
如果你有想分享的想法,最佳方式是给我发送补丁(我更喜欢附件,而不是直接粘贴文本),或者注册 GitHub 账号。 注册后,派生 Ledger 项目, 尽情修改,然后在 GitHub 上创建拉取请求。