gpt4 book ai didi

Python + setuptools : distributing a pre-compiled shared library with boost. python 绑定(bind)

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:16:22 24 4
gpt4 key购买 nike

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

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

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 绑定(bind)
  • 你想用setuptools打包这个库

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

如果您重载 setuptools 用于构建扩展的类,那么您想要的是可能的,以便这些类实际调用您的 CMake 构建系统。这不是微不足道的,但您可以在这里找到一个工作示例,由 pybind11 项目提供:

https://github.com/pybind/cmake_example

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

如果您的构建需要设置特殊的 -D 标志,这对您来说应该是开箱即用的或稍作修改。希望对您有所帮助!

关于Python + setuptools : distributing a pre-compiled shared library with boost. python 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33635829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com