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

时间:2015-11-10 17:19:32

标签: python c++ boost setuptools

我有一个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文件。

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你会遇到以下情况:

  • 您有一个基于CMake的C ++库构建版本,其中包含Python绑定
  • 您想使用setuptools打包此库

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

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

https://github.com/pybind/cmake_example

查看setup.py,您将看到如何继承和修改类build_extExtension以执行CMake构建。

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