原生扩展¶
可选 C 扩展加快 Numba 预计算路径的记录转换,适合成交与意图记录较多的研究。 订单、意图、成交和税务批次在回测结束时完整返回,调用方式与纯 Python 包一致。 Linux x86_64 用户可从源码构建;PyPI 的基础安装使用纯 Python 包。
构建环境¶
原生构建目前仅接受 Linux x86_64、CPython 3.13—3.15、启用 GIL 的非 debug 解释器
使用公开稳定 C API,最低接口为 Python 3.12 的
Py_LIMITED_API=0x030C0000可使用本机 Python 3.12—3.15 的兼容开发头文件;包支持 Python 3.13—3.15
wheel 标为
cp313-abi3-linux_x86_64,供上述本机构建环境使用无扩展时使用纯 Python 记录路径
abi3 是扩展的稳定 ABI 标签;基础包支持 Windows/Linux,原生构建使用上面的 Linux 环境。
构建与运行分别控制¶
变量 |
值 |
作用 |
|---|---|---|
|
未设置、 |
构建纯 Python wheel,不探测编译器 |
|
|
必须生成并加载验证原生扩展,否则构建失败 |
|
|
兼容扩展可用时使用,否则使用纯 Python 记录路径 |
|
|
原生能力不可用时明确报错,用于原生验证任务 |
|
|
即使安装原生 wheel,也使用纯 Python 记录路径 |
先用构建开关生成并安装原生 wheel,再用运行开关选择记录路径。运行来源的 engine_sha256 会标识相应实现与二进制。
构建 wheel¶
在仓库根目录、CPython 3.13—3.15 环境中执行:
# 默认纯 Python;即使源码树有旧 .so,也不会打入 wheel。
DORIBT_BUILD_NATIVE=off uv build
# 需要本机 C11 编译器及兼容 Python 开发头文件。
DORIBT_BUILD_NATIVE=required uv build --wheel
头文件默认从当前解释器的 sysconfig 查找。若头文件单独安装,可显式指定其目录:
DORIBT_NATIVE_INCLUDE=/path/to/python3.12/include \
DORIBT_BUILD_NATIVE=required uv build --wheel
该目录须含 Python.h、patchlevel.h 和 pyconfig.h;不接受 debug 或 free-threaded
头文件。CC 可指定本机编译器命令,例如 CC=clang。构建器不下载头文件,不自动安装编译器,
不使用 -march=native,也不继承额外 CFLAGS/LDFLAGS 来改变已经验证的构建配置。
编译失败、头文件缺失、平台不受支持、API 版本不符或新进程加载失败都会使 required 失败。
sdist 始终只含源码、构建钩子和共享构建工具,不含本机二进制。在解包后的 sdist 中,
同样可以选择纯 Python 或 required 原生 wheel。原生 wheel 的二进制来自本次临时编译,
不会复用源码树残留的开发产物。
本地开发¶
# 显式构建到 build/native/doribt,默认不修改源码包。
uv run --no-sync python scripts/build_native.py
# 可编辑安装需要原生能力时,显式放入源码包。
uv run --no-sync python scripts/build_native.py --inplace
# 确认已安装/本地源码扩展可用;此处导入内部模块仅用于开发诊断。
DORIBT_NATIVE_RECORDS=required uv run --no-sync python -c \
"from doribt.runtime.native_records import available; assert available()"
可编辑安装先完成普通安装,再运行上面的开发构建命令。
构建失败时保留已有开发二进制,错误通过构建命令报告。
开发产物已被版本控制和发行打包规则排除。要检查纯 Python 路径,使用运行时 off,
或从本次生成的纯 Python wheel 建立独立环境。
隔离安装验证¶
# 如需指定头文件,先设置 DORIBT_NATIVE_INCLUDE。
uv run --no-sync python scripts/check_native_package.py \
--report .quality/native-packaging.json
此检查要求已安装开发依赖、numba extra 与 uv;已有完整依赖缓存时可加 --offline。
纯 Python 安装检查只安装 NumPy;原生执行验证另装与当前环境同版本的 Numba/llvmlite。
默认在临时目录中验证后清理;若需要保留 wheel 与独立安装供进一步复核,可加
--work-dir <尚不存在的目录>,不会覆盖已有验证目录。该命令从 sdist 重建纯 Python/原生 wheel,在独立环境中检查安装、文件哈希和完整回测结果,并验证 C 扩展的实际调用。
完整开发检查见质量门禁。