我有一个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
文件。
答案 0 :(得分:1)
如果我理解你的问题,你会遇到以下情况:
后者允许您调用python setup.py install --user
,它会在site-packages
目录中安装lib,并使其可以从系统中的每个路径使用。
如果你重载setuptools用来构建扩展的类,那么你想要的是什么,以便这些类实际上调用你的CMake构建系统。这不是一件容易的事,但你可以在这里找到一个工作的例子,由pybind11项目提供:
https://github.com/pybind/cmake_example
查看setup.py
,您将看到如何继承和修改类build_ext
和Extension
以执行CMake构建。
如果您的构建需要设置特殊的-D
标记,那么这应该可以为您开箱即用或稍加修改。
我希望这有帮助!