恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
如何用 meson-python 构建包含 pybind11 扩展的 Python 包?
首页
资讯中心
/
如何用 meson-python 构建包含 pybind11 扩展的 Python 包?
如何用 meson-python 构建包含 pybind11 扩展的 Python 包?
发布时间:2026/9/15 18:01:15
如何用 meson-python 构建包含 pybind11 扩展的 Python 包【免费下载链接】pybind11Seamless operability between C11 and Python项目地址: https://gitcode.com/GitHub_Trending/py/pybind11如果你的 Python 包包含 C 扩展模块又想用 Meson 而不是 CMake 或 setuptools 来驱动构建pybind11 官方文档给出了完整的接入方式用meson-python作为pyproject.toml的构建后端在meson.build中通过dependency(pybind11)把扩展模块编译出来最终产出一个可以被import的 wheel。整个过程不需要手写编译器参数——Meson 侧对 pybind11 的依赖解析依赖 pybind11 自身的 pkg-config 支持见 docs/compiling.rst 的 Building with Meson 一节pybind11 从 PyPI 安装的包里已带上对应的.pc文件。准备条件一个 C 编译器Meson 会自行调用。构建所需的meson、ninja、pybind11都写进构建依赖里由 pip 在隔离环境中自动安装本地不需要预装。项目必须位于git或 mercurial仓库中文档明确说明 meson-python 依赖版本控制系统来生成 SDistdocs/compiling.rst 的 Modules with meson-python 一节。不在 git 仓库里的目录直接构建会失败这是该路径与 scikit-build-core 路线的一个硬性差异。计划上传 PyPI 的项目还需要在[project]表中补齐元数据文档只提出这一要求未展开具体字段。配置 pyproject.toml 与 meson.build项目根目录下放两个文件。pyproject.toml声明构建后端和构建依赖[build-system] requires [meson-python, pybind11] build-backend mesonpyrequires中的pybind11就是让meson.build里dependency(pybind11)能解析到的前提——pip 构建时会先安装这个包Meson 再通过它的 pkg-config 文件找到头文件路径。meson.build使用文档给出的示例结构其中example是模块名0.1.0是版本号example.cpp是源文件替换成你自己项目的对应值project( example, cpp, version: 0.1.0, default_options: [ cpp_stdc11, ], ) py import(python).find_installation(pure: false) pybind11_dep dependency(pybind11) py.extension_module(example, example.cpp, install: true, dependencies : [pybind11_dep], )cpp_stdc11对应 pybind11 的最低 C 标准用更新标准的项目改成c14、c17等即可文档示例只演示了c11这一种写法。编写扩展模块源码example.cpp可以直接使用文档 First stepsdocs/basics.rst中的简单函数示例#include pybind11/pybind11.h namespace py pybind11; int add(int i, int j) { return i j; } PYBIND11_MODULE(example, m) { m.doc() pybind11 example plugin; // optional module docstring m.def(add, add, A function that adds two numbers); }两点需要注意pybind11/pybind11.h内部包含Python.h文档要求它必须是源文件或头文件中第一个被包含的文件其他头文件不要放在它前面。PYBIND11_MODULE的第一个参数example是 Python 模块名必须与meson.build中py.extension_module(example, ...)的目标名一致构建后import example才能找到模块。构建并验证结果在项目根目录即 git 仓库内执行pip wheel .pip 检测到pyproject.toml后会新建一个隔离虚拟环境只安装requires中列出的meson-python和pybind11调用mesonpy后端完成编译然后丢弃该环境并输出 wheel 文件。成功标志是终端生成形如example-0.1.0-*.whl的产物构建日志中不出现 Meson 配置错误。装上 wheel 后按文档示例的方式做验证 import example example.add(1, 2) 3这是 docs/basics.rst 中展示的文档示例交互输出import example无报错、add(1, 2)返回3说明扩展模块编译、安装和加载都正常。限制与后续方向git/mercurial 要求只对 meson-python 这条路线成立。如果项目不适合放在 git 仓库中或希望用更简单的配置docs/compiling.rst 同页提供了 scikit-build-core 路线作为替代pyproject.toml中改用scikit_build_core.build后端配合一个几行的CMakeLists.txtfind_package(pybind11 CONFIG REQUIRED)pybind11_add_module。pyproject.toml的[project]表填写规范文档指向了 PEP 元数据指南未在本仓库内展开上传 PyPI 前需按该指南补齐。更多构建细节CMake 的pybind11_add_module、find_package 与 add_subdirectory 的差异、手动编译命令等可继续阅读 docs/compiling.rst。【免费下载链接】pybind11Seamless operability between C11 and Python项目地址: https://gitcode.com/GitHub_Trending/py/pybind11创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考