如何从使用CMake创建的PyBind11模块创建Python包



我有一个c++代码使用Cmake &制作建筑部分。由于PyBind11,我还对该代码进行了python绑定。

我在CMakeLists.txt中使用pybind11_add_module,现在当我构建(cmake -Bbuild && cd build && make)时,它创建了一个python_module。所以在build目录下。

我可以将它手动移动到其他地方,如果模块在同一文件夹中,我可以在python脚本中使用它。

现在我想要"包装"。这个模块,我不知道怎么做。我的目标是能够在任何地方使用pip install python_package_from_module,而不需要手动移动/复制python_module。所以文件。(编辑/注意:现在我不想在PiPy上发布我的包,只是为了能够在本地pip安装包)

你知道怎么做吗?我没有太多关于打包的知识,我只在pyproject中做过一次。

我发现的唯一的例子是使用setup.py,而且要复杂得多。例如,我必须承认我真的不明白这个Pybind11 Cmake示例是如何工作的。

如果我正确理解你的问题,你希望能够导入你的模块,而不必手动移动。

运行python3 setup.py install应该通过cmake编译模块并进行必要的链接。之后,你就可以像往常一样导入你的模块了。

如另一个问题所述,我将创建的库安装到python<version>/site-packages目录:

find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
...
pybind11_add_module( mylib MODULE
mylib.cxx
)
...
install(TARGETS mylib
COMPONENT python
LIBRARY DESTINATION "lib/python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}/site-packages"
ARCHIVE DESTINATION "lib"
RUNTIME DESTINATION "bin")

这样python解释器就可以找到库,而不需要对PYTHONPATH

进行额外的操作变量Python3_VERSION_MAJOR和Python3_VERSION_MINOR由' find_package'指令提供

最新更新