Python+setuptools:分发一个带有boost.Python绑定的预编译共享库
Python + setuptools: distributing a pre-compiled shared library with boost.python bindings
我有一个C++库(我们在下面称之为Example),我使用boost.Python库为其编写了Python绑定。这个Python封装的库将被称为pyExample。整个项目是使用CMake构建的,生成的Python封装库是一个名为libpyExample.so
的文件。
当我使用与libpyExample.so
位于同一目录中的Python脚本中的Python绑定时,我只需编写:
import libpyExample
libpyExample.hello_world()
并且这执行通过封装处理暴露的CCD_ 3功能。
我想做什么
为了方便起见,我希望我的pyExample库可以在任何地方使用,只需使用命令
import pyExample
我还希望pyExample只需一个命令就可以轻松地安装在任何虚拟机中。所以我认为一个方便的过程是使用setuptools来实现这一点。因此,这意味着:
- 使
libpyExample.so
对任何Python脚本都可见 - 更改访问模块的名称
我确实发现了很多关于使用setuptools编译C++扩展的东西,但没有发现任何关于打包预编译的C++扩展的内容。我想做的事情有可能吗?
我不想做的事
我不想用setuptools构建pyExample库,我希望避免对现有项目进行过多修改。CMake构建很好,我可以很容易地检索libpyExample.so
文件。
如果我正确理解你的问题,你会遇到以下情况:
- 您有一个现有的基于CMake的带有Python绑定的C++库构建
- 你想用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
标志,那么这应该是开箱即用的,或者只需少量修改。我希望这能有所帮助!
- 创建一个函数的 Python 绑定,返回指向带有 boost 的向量的指针
- Python C 绑定 - 获取从 python 到 C++ 的数组
- 如何将 compile_commands.json 与 llvm clang (版本 7.0.1) python 绑定一
- 用于基于节点的树结构的Python绑定
- 使用 SWIG 绑定 Python/C++ 模板
- 如何仅使用 c/python API 将 c++ 成员函数绑定到 python?
- OpenCV 如何确定具有不同参数的函数的 python 绑定?
- 使用 python 绑定来检查 C++ 类型是否是规范方式的指针、引用等?
- 迭代从 SWIG 绑定返回的 python 中的 vector<pair<int,int>>
- python+libclang;来回迭代:将字段注释绑定到字段
- 生成python绑定,要使用的方法/程序
- boost.python向现有的PyObject添加绑定(对于例外处理)
- Boost.Python是否需要为其他Boost库绑定代码
- 如何使用Python绑定到Clang来解析单个文件
- 为使用OpenCV的C 代码编写Python绑定
- 使用绑定C 时,Python编译错误
- 有没有一种方法可以从python类生成一个c++类,并在编译时将其绑定
- Python / C++绑定,如何再次链接静态C ++库(portaudio)与distutils
- C/Python绑定:指针地址修改
- 使用MuJoCo-py包为MuJoCo物理库绑定Python