Python setuptools:使用boost.python绑定分发预编译的共享库

我有一个C库(我们将其称为下面的示例),我使用boost. python库编写了 Python绑定.这个 Python包装的库将被称为pyExample.整个项目使用CMake构建,生成的Python包装库是一个名为libpyExample.so的文件.

当我使用与libpyExample.so位于同一目录中的Python脚本的Python绑定时,我只需编写:

import libpyExample
libpyExample.hello_world()

并执行包装过程中公开的hello_world()函数.

我想做的事

为方便起见,我希望我的pyExample库可以在任何地方使用该命令

import pyExample

我还希望pyExample可以在一个命令中轻松安装在任何virtualenv中.所以我认为一个方便的过程就是使用setuptools来实现这一目标.因此,这意味着:

>使libpyExample.so对任何Python脚本都可见
>更改访问模块的名称

我确实找到了很多关于使用setuptools编译C扩展的东西,但没有关于打包预编译的C扩展.我甚至想做什么?

我不想做什么

我不想用setuptools构建pyExample库,我想避免过多地修改现有项目. CMake构建很好,我可以很容易地检索libpyExample.so文件.

最佳答案 如果我正确理解您的问题,您会遇到以下情况:

>您有一个基于CMake的C库库构建与Python绑定
>您想使用setuptools打包此库

然后,后者允许您调用python setup.py install –user,它将lib安装在site-packages目录中,并使其可以从系统中的每个路径使用.

如果你重载setuptools用来构建扩展的类,那么你想要的是什么是可能的,这样这些类实际上会调用你的CMake构建系统.这不是一件容易的事,但你可以在这里找到一个工作的例子,由pybind11项目提供:

https://github.com/pybind/cmake_example

看一下setup.py,您将看到如何继承和修改类build_ext和Extension以执行CMake构建.

这应该可以为您开箱即用,或者只需稍加修改即可 – 如果您的构建需要设置特殊的-D标志.
我希望这有帮助!

点赞