使用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
相关产品推荐
相关产品推荐

