gpt4 book ai didi

python - 如何导入或安装预构建的 python 扩展模块 (C++)(即未通过 setuptools 编译的库)?

转载 作者:行者123 更新时间:2023-11-30 03:27:25 24 4
gpt4 key购买 nike

我有一个 C++ 项目,我正在为其开发 Python 接口(interface)。现在我正在使用 pybind11因为它看起来非常简洁,并且有一些很好的工具可以使用 CMake 构建扩展模块,这就是主要 C++ 项目的构建方式。

通过 CMake,我设法获得了一个包含要构建的接口(interface)函数的共享库,但是现在我有了它,我不知道如何告诉 Python 它存在并使其可导入。我不想重新配置要通过 Python 启动的项目的整个构建(即如 here 所述,使用 setuptools),因为它是一个大项目,我只是为其中的一部分提供 Python 接口(interface)。因此,如果我可以只为 Python 构建共享库以及其余的 C++ 代码,然后稍后运行“setup.py install”来做任何其他需要做的事情来使共享库可见,那就更好了到 Python。

这可能吗?或者我是否需要做一些其他类型的重构,比如让主项目构建一些其他纯 C++ 库,然后我将它们链接到通过 setuptools 单独构建的 Python 扩展模块库?

最佳答案

如果您只需要安装一个二进制模块,您可以为该模块创建一个简单的安装程序。假设您有一个已使用 cmake 生成的构建脚本构建的二进制模块 foo.so(如果您在 Windows 上工作,则为 foo.pyd)。然后你可以创建一个简单的设置脚本:

from setuptools import setup

setup(
name='foo',
version='0.1.2.3',
py_modules=['foo']
)

然后你需要添加MANIFEST.in文件来选择你的二进制模块文件:

include foo.so

所以你需要3个文件:

foo.so
MANIFEST.in
setup.py

现在您可以从您的 Python 虚拟环境执行 python setup.py install,您的二进制模块将安装在其中。如果你想分发你的模块,那么最好安装 Python wheel 包并创建一个 .whl 文件:python setup.py bdist_wheel。以后可以使用 pip 命令安装这样的“轮子”。请注意,二进制模块必须安装在用于构建这些模块的相同平台和 Python 版本上。

关于python - 如何导入或安装预构建的 python 扩展模块 (C++)(即未通过 setuptools 编译的库)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47408154/

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