Ben*_*mer 3 c++ python setuptools extension-modules pybind11
我有一个 C++ 项目,我正在为其开发 Python 接口。现在我正在使用pybind11因为它看起来很简洁,并且有一些很好的工具可以使用 CMake 构建扩展模块,这就是主要的 C++ 项目的构建方式。
通过 CMake 我设法获得了一个包含要构建的接口函数的共享库,但是现在我有了它我不知道如何告诉 Python 它存在并使其可导入。我不想重新配置要通过 Python 启动的整个项目构建(即如这里使用 setuptools 所述),因为它是一个大项目,我只是为它的一部分提供了一个 Python 接口。因此,如果我可以只为 Python 构建共享库以及其余的 C++ 代码,然后再运行“setup.py install”来执行其他任何需要使共享库可见的操作,那就更好了到 Python。
这可能吗?或者我是否需要进行一些其他类型的重构,例如让主项目构建一些其他纯 C++ 库,然后我只需将其链接到通过 setuptools 单独构建的 Python 扩展模块库?
如果您只需要安装一个二进制模块,您可以为该模块创建一个简单的安装程序。假设您有一个已经使用 cmake 生成的构建脚本构建的二进制模块foo.so(或者foo.pyd如果您在 Windows 上工作)。然后您可以创建一个简单的安装设置脚本:
from setuptools import setup
setup(
name='foo',
version='0.1.2.3',
py_modules=['foo']
)
Run Code Online (Sandbox Code Playgroud)
然后你需要添加MANIFEST.in文件来选择你的二进制模块文件:
include foo.so
Run Code Online (Sandbox Code Playgroud)
所以你需要3个文件:
foo.so
MANIFEST.in
setup.py
Run Code Online (Sandbox Code Playgroud)
现在您可以python setup.py install在您的 Python 虚拟环境中执行操作,并且您的二进制模块将安装在其中。如果你想分发你的模块,那么最好安装 Pythonwheel包并创建一个.whl文件:python setup.py bdist_wheel. 这样的“轮子”以后可以用pip命令安装。请注意,二进制模块必须安装在用于构建这些模块的相同平台和 Python 版本上。
| 归档时间: |
|
| 查看次数: |
1329 次 |
| 最近记录: |