我有一个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'指令提供