首页/新闻资讯/正文详情

Google Benchmark Python 绑定:安装 wheel、源码构建与 Bazel 编译管线解析

发布时间:2026/9/25 7:45:16 来源:云帆数科 栏目:资讯中心
Google Benchmark Python 绑定:安装 wheel、源码构建与 Bazel 编译管线解析
性能测试【免费下载链接】benchmarkA microbenchmark support library项目地址https://gitcode.com/gh_mirrors/benchmark5/benchmark点击查看免费下载本文围绕 Google Benchmark 官方文档 docs/python_bindings.md 展开完整讲解其 Python 绑定的安装与构建方式既包括从 PyPI 直接安装预编译 wheel 的标准流程也包括从源码构建 wheel 所需的虚拟环境、pip与 Bazel 前置条件。结合仓库中的 setup.py、pyproject.toml 与 bindings/python/google_benchmark 目录本文进一步剖析python -m build背后的 Bazel 编译管线、平台相关编译选项与包的结构组成帮助你不仅能装上这个包还能理解它为什么这样构建、在哪些环境下会失败。Python 绑定概览提供什么、支持什么平台Google Benchmark 的 Python 绑定以google-benchmark为包名发布在 PyPI安装后即可在 Python 中直接调用 C 侧的基准测试框架无需自行编译任何 C 代码。按 docs/python_bindings.md 的说明当前预编译 wheel 覆盖的平台与解释器版本为维度支持范围仓库佐证操作系统macOSARM64 与 Intel x86、Linux x86-64、64 位 Windowsdocs/python_bindings.mdPython 版本Python 3.8 – 3.12pyproject.toml 中requires-python 3.8及Programming Language :: Python :: 3.8至3.12的 classifiersPython 依赖absl-py0.7.1pyproject.toml 的dependencies段从 bindings/python/google_benchmark/init.py 的导入语句可以看到纯 Python 层只是对底层 C 扩展google_benchmark._benchmark的再导出State、Counter、时间单位kNanosecond等与复杂度枚举oN、oNLogN等都来自该二进制模块这解释了为什么该包必须随平台附带编译产物而不能纯 pip 分发。从 PyPI 安装推荐方式安装 Google Benchmark 的 Python 绑定执行python -m pip install --upgrade pip # for manylinux2014 support python -m pip install google-benchmark第一条命令升级pip是为了获得 manylinux2014 兼容能力较新的 Linux wheel 构建在 manylinux2014 标准之上旧版 pip 无法识别该平台标签。为避免污染系统解释器官方建议在虚拟环境中执行上述命令。以标准库venv为例python3 -m venv myenv source myenv/bin/activate # Windows 下为 .\myenv\Scripts\Activate.ps1 python -m pip install google-benchmark安装后可用google_benchmark.__version__确认版本bindings/python/google_benchmark/version.py 通过importlib.metadata.version(google-benchmark)读取已安装分发包的元数据因此版本号始终与 pip 记录一致未安装该包时导入会安静失败而不抛错。从源码构建 wheel如果需要自行构建 wheel例如定制构建或验证源码完整流程如下与 docs/python_bindings.md 一致git clone地址可按镜像替换git clone https://gitcode.com/gh_mirrors/benchmark5/benchmark.git cd benchmark # create a virtual environment and activate it python3 -m venv venv --system-site-packages source venv/bin/activate # .\venv\Scripts\Activate.ps1 on Windows # upgrade Pythons system-wide packages python -m pip install --upgrade pip build # builds the wheel and stores it it in the directory dist. python -m build构建产物会存放在dist/目录中是一个标准的 manylinux/macOS/Windows wheel可直接pip install或上传到内部仓库。关键前置条件构建 wheel 需要安装 Bazel。这不是可选依赖而是构建后端的硬性要求——后文的setup.py会揭示整个 C 扩展的编译完全委托给 Bazel 完成。各平台的 Bazel 安装方式可参考其官方安装文档同时注意 setup.py 要求编译 C17nanobind的硬性要求因此构建机上的工具链必须支持 C17。构建系统声明位于 pyproject.toml[build-system] requires [setuptools, setuptools-scm[toml], wheel] build-backend setuptools.build_metasetuptools-scm负责从 VCS 推导版本号dynamic [version][tool.setuptools]段则将package-dir指向bindings/python说明 Python 包源码并不在仓库根目录而是位于 bindings/python/google_benchmark 下——这直接决定了构建时 Bazel 目标的引用路径。构建管线深度解析setup.py 中的 Bazel 委托机制python -m build触发的并不是普通的build_ext编译流程。setup.py 自定义了两个类把 setuptools 的 C 扩展构建重写为一次 Bazel 调用BazelExtensionsetup.py扩展对象不携带源码文件只记录一个 Bazel 目标。在 setup.py 的setuptools.setup()中注册的正是ext_modules[ BazelExtension( namegoogle_benchmark._benchmark, bazel_target//bindings/python/google_benchmark:_benchmark, py_limited_apipy_limited_api, ) ],该目标对应 bindings/python/google_benchmark/BUILD 中的nanobind_extension规则以 bindings/python/google_benchmark/benchmark.cc 为源文件并依赖根目录的//:benchmark即 BUILD.bazel 中定义的完整 C 库linkstatic True静态链接。BuildBazelExtension.bazel_build()setup.py真正执行bazel build的位置关键命令行参数如下参数作用--symlink_prefixbuild_temp/bazel-把 bazel-bin 等产物符号链接到临时构建目录避免污染源码树--compilation_modedbg/opt根据是否 debug 构建选择编译模式--cxxopt-stdc17Windows 为/std:c17nanobind 要求 C17setup.py--rules_python//python/config_settings:python_version3.x只传 major.minor省略 patch 版本防止当前rules_python尚未注册对应 toolchain 时构建失败--nanobind_bazel//:py-limited-apicp312仅当解释器为 Python ≥ 3.12 时启用 Limited API--macos_minimum_os10.14macOS 平台最低部署目标C17 所需--linkopt/LIBPATH:...Windows 下链接python*.lib构建完成后产物Windows 为.pyd启用 Limited API 时为.abi3.so否则为.so从bazel-bin拷贝到扩展最终路径setup.py随后显式执行bazel shutdown让服务进程优雅退出。Limited API 策略setup.py 中硬编码py_limited_api version_tuple (3, 12)即只有 Python 3.12 及以上的解释器才构建 cp312 Stable ABI 的 wheel对应bdist_wheel的py_limited_apicp312选项使单个 wheel 可向前兼容未来的 3.x 小版本3.8–3.11 则按解释器版本构建各自的 wheel。CI 环境补丁_maybe_patch_toolchains()setup.py在检测到CIBUILDWHEEL环境变量且系统为 Linux 时临时用正则改写 MODULE.bazel 中的python.toolchain(...)定义追加ignore_root_user_error True以规避 cibuildwheel 的 Docker 容器以 root 运行 rules_python 时的报错构建结束后恢复原文件。这一实现印证了官方预编译 wheel 正是由 cibuildwheel 在容器中产出的。绑定包的结构纯 Python 层与 C 层的分工理解包的构成有助于定位问题。bindings/python/google_benchmark/BUILD 声明了三类目标py_librarygoogle_benchmark仅包含init.py依赖:_benchmarknanobind_extension_benchmark由 benchmark.cc 编译出的 C 扩展py_testexampleexample.py可用作安装后的自检示例。C 扩展侧benchmark.cc 使用 nanobind 完成三件事注册基准RegisterBenchmark(name, f)把 Python 可调用对象包进一个捕获 lambda再以benchmark::RegisterBenchmark(name, f { f(state); })形式交给 C 框架benchmark.cc暴露State全接口__bool__对应KeepRunning因此 Python 端可以while state:循环以及pause_timing/resume_timing、skip_with_error、set_iteration_time、range、counters、complexity_n等属性与方法benchmark.cc暴露Counter及标志kIsRate、kAvgThreads、kInvert等通过nb::enum_导出支持按位或组合benchmark.cc。纯 Python 层的init.py 则提供三个入口benchmark.register可带name参数注册基准函数benchmark.option.xxx通过__OptionMaker的动态__getattr__收集arg、range、unit、measure_process_cpu_time等构建器调用最终由register按 C builder 模式回放init.pybenchmark.main()先用 C 扩展的Initialize(argv)完成 absl 命令行标志解析再调用RunSpecifiedBenchmarks()执行init.py进程退出前由atexit清理已注册基准。安装后的快速验证安装完成后可用一个最小示例验证环境模式取自官方示例 example.pyimport google_benchmark as benchmark benchmark.register def sum_million(state): while state: sum(range(1_000_000)) if __name__ __main__: benchmark.main()保存为hello_bench.py后运行python hello_bench.py即可看到熟悉的 Google Benchmark 表格输出还可以像 C 一样传--benchmark_filtersum_million过滤基准。完整的特性演示——pause_timing暂停计时、skip_with_error条件跳过、set_iteration_time手动计时、Counter自定义计数速率/线程平均/反转、option.arg/option.range/option.complexity参数化与复杂度分析——都收录在 example.py 中可作为 Python 端 API 的速查表。小结适用前提与常见限制直接用 PyPI面向 macOSARM64/Intel、Linux x86-64、64 位 Windows 上 Python 3.8–3.12 的用户这是官方文档推荐且唯一免去编译器的路径源码构建额外要求安装 Bazel、支持 C17 的编译器且python -m build的整个 C 扩展流程由 setup.py 中的 Bazel 管线驱动任何一步 Bazel 失败如 toolchain 未注册、rules_python 版本不匹配都会导致 wheel 构建失败macOS 构建需系统版本不低于 10.14setup.py运行期依赖absl-pypyproject.toml 声明用于命令行参数解析pip install google-benchmark时会自动安装。掌握以上内容后你可以独立判断当前机器适合走哪条安装路径并在源码构建失败时依据setup.py中的 Bazel 参数与 BUILD 目标快速定位是工具链、Bazel 配置还是平台选项出了问题。赞分享性能测试【免费下载链接】benchmarkA microbenchmark support library项目地址https://gitcode.com/gh_mirrors/benchmark5/benchmark点击查看免费下载相关推荐Google Benchmark Python 绑定安装、源码构建与 Python 基准测试实战指南Google Benchmark Python 绑定安装、源码构建与 Python 基准测试实战指南 导读 Google Benchmark本仓库项目名性能测试开发工具Google Benchmarkbenchmark使用指南从安装构建、基准测试编写到 CMake/Bazel 项目集成Google Benchmarkbenchmark使用指南从安装构建、基准测试编写到 CMake/Bazel 项目集成 Google Benchmark性能测试开发工具在 NVIDIA Jetson 上构建与安装 MXNet本机源码编译、Docker 交叉编译与 Python 绑定配置指南在 NVIDIA Jetson 上构建与安装 MXNet本机源码编译、Docker 交叉编译与 Python 绑定配置指南 本文是 MXNet 在 NVIDI深度学习人工智能机器学习分布式训练上一篇3 步让 2012 款 Mac 装上新 macOSOpenCore Legacy Patcher 完整指南下一篇DataX KingbaseesWriter 插件深度指南基于 JDBC 批量写入 KingbaseES 的配置、类型映射与实现原理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Agentic Runtime 在 Kubernetes 上的调度与编排实践
Agentic Runtime 在 Kubernetes 上的调度与编排实践

1. 从"ax"这个标题说起:一个被低估的运行时调度命题第一次看到"ax"这个标题,很多人会以为是某个命令行工具的缩写,或者某个库的名字。但结合热搜词里的agentic、orchestration、runtime、Kubernetes这几个关键词&#xf… · 2026/9/25 7:45:16

Windows高性能模式原理与实操指南:powercfg调优全解析
Windows高性能模式原理与实操指南:powercfg调优全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 7:45:10

进制转换必学:顺序栈与链栈实现十进制转2/8/16进制
进制转换必学:顺序栈与链栈实现十进制转2/8/16进制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 7:45:10

AI编程神器:Cursor 配 TaoToken 的 settings.json 骨架与验证
AI编程神器:Cursor 配 TaoToken 的 settings.json 骨架与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 9:37:03

麻雀搜索算法优化XGBoost:多特征分类调参实战指南
麻雀搜索算法优化XGBoost:多特征分类调参实战指南

简介:一份基于麻雀搜索算法(SSA)优化极端梯度提升(XGBoost)的多特征分类预测完整项目实例,面向具备机器学习基础、希望掌握群体智能优化与XGBoost结合应用的研发人员和数据科学家,可应用于金融风… · 2026/9/25 9:36:57

导波光学基础:平板波导模式与特征方程从原理到PPT实战
导波光学基础:平板波导模式与特征方程从原理到PPT实战

简介:一份来自北京理工大学的《导波光学基础》教学课件(PPT),面向光学工程、光通信及相关专业的高校学生与入门研究者,系统讲解光波在晶体中的传播规律。课件以晶体几何特性和数学描述为基础,重点展开电光效… · 2026/9/25 9:36:57

Dora 软实时调优指南:SCHED_FIFO、mlockall 与 CPU 亲和性绑定达成微秒级延迟
Dora 软实时调优指南:SCHED_FIFO、mlockall 与 CPU 亲和性绑定达成微秒级延迟

Dora 软实时调优指南:SCHED_FIFO、mlockall 与 CPU 亲和性绑定达成微秒级延迟 【免费下载链接】dora DORA (Dataflow-Oriented Robotic Architecture 面向数据流的机器人架构) 是为 AI 与具身智能机器人打造的高性能开发框架,以数据流范式重构开发逻辑&a… · 2026/9/25 9:36:50

技术方案怎么说清用户价值:用 TaoToken 统一 Key 通道讲透成本、风险与体验
技术方案怎么说清用户价值:用 TaoToken 统一 Key 通道讲透成本、风险与体验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 9:36:50

AI前沿 | 2026年9月25日:Google Gemini 4 进入后训练 + ‘远早于年底‘发布 + 从 AGI 叙事转向可信任智能体
AI前沿 | 2026年9月25日:Google Gemini 4 进入后训练 + ‘远早于年底‘发布 + 从 AGI 叙事转向可信任智能体

AI前沿 | 2026年9月25日:Google Gemini 4 进入后训练 远早于年底发布 从 AGI 叙事转向可信任智能体 📖 首屏导读 本教程配套付费专栏:《大模型工程师修炼手记》 19.9 元(AI 编程 Agent 实战 本文同主题系统课程) … · 2026/9/25 9:36:44

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码