You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用setuptools构建依赖本地C++库的Python扩展遇阻求助

问题:为C++库构建Python包装器(Python C API + setuptools)

我有一个C++编写的库,想用Python C API直接开发包装器(不依赖Boost.Python、Cython等工具),仓库目录结构如下:

.
├── include # C++库头文件
│   └── …
├── Makefile
├── python # Python包目录
│   ├── wrapper-module # C++和Python源文件
│   │   └── …
│   ├── pyproject.toml
│   ├── setup.py
│   └── …
├── src # C++库源文件
│   └── …
└── tests # C++库测试用例
    └── …

我用GNU make构建C库,选择setuptools 80.9.0来构建Python模块,但运行python -m build时,相关文件会被复制到独立的构建目录,即便加了--no-isolation参数也一样。目前无法让C库在这个构建目录中可用,也没法确定它相对于构建目录的路径(我希望避免用绝对路径或把库安装到/usr这类系统目录),只有包装器的源文件能正常复制到构建目录。

我已经尝试过以下方案:

  • 查阅文档:找到的内容都是关于Python依赖的,没有涉及本地C++库依赖的处理方法
  • 通过Makefile构建阶段把C++库产物复制到Python目录:但构建产物不会被同步到独立的构建位置,也找不到配置选项把这个目录设为构建依赖
  • 在setup.py中添加自定义构建阶段:找不到能获取原始仓库路径的函数/属性,没法在构建过程中复制所需文件
  • 基于setuptools.build_meta编写自定义构建后端:用os.getcwd()能拿到原始路径,但即便在pyproject.toml中设置了build-backend和backend-path,包含自定义后端的模块也不会被复制到构建目录(暂时还没重点研究如何存储原始路径的问题)

求能让setuptools识别已构建的C++库及其头文件位置的可行方案。

内容的提问来源于stack exchange,提问作者tsnorri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 07:53:17