因为本人需要安装pybind11,然后在网上搜索了一些教程,但还是无法解决一些坑,偶然间看到(pybind11库(用于在python中调用C++的安装与配置使用(windows/linux系统)-CSDN博客)这位大佬的文章点击跳转,(如有侵权请联系作者删除),然后解决了部分问题,后面自己又捣鼓了一下终于解决了(折磨了两天),所以想把经验分享给大家,希望可以帮助到有需要的人。
一.前期安装工作
1.1 安装pybind11(通过包管理器安装)
在终端输入指令
sudo apt update
sudo apt install pybind11-dev
然后会自动将头文件安装在 /usr/include/pybind11
1.2 使用pip安装
在终端输入指令
pip install pybind11
1.3 新建一个文件夹,命名为extern(官方推荐)

1.4 在github上下载pybind11
在终端上输入指令
cd extern
git clone https://github.com/pybind/pybind11.git
成功后删掉里面的.github(pybind11原作者的github)文件
1.5 安装pytest
pip install pytest
二.新建pybind11的模块
2.1 新建cpp文件
打开VScode(需安装好C++和python的一些拓展,自己去搜就好,一搜就有),在当前目录上,也就是和pybind11同级目录下,建立C++文件,命名为example.cpp

2.2 将代码,输入到example.cpp
#include <pybind11/pybind11.h>
namespace py = pybind11;
int add(int i, int j)
{
return i + j;
}
PYBIND11_MODULE(example,m)
{
m.doc() = "pybind11 example plugin";
m.def("add",&add,"A function which adds two numbers",py::arg("i")=1,py::arg("j")=2)
m.attr("the_answer") = 42;
py::object world = py::cast("World");
m.attr("what") = world;
}
2.3 此时出现的问题及其解决方法
问题:(1)头文件<pybind11/pybind11.h>无法识别到而报错
或者:(2)PYBIND11_MODULEB报错
解决方法:
(1)在pybind11同级的目录下,新建文件夹为.vscode(必须命名为这个!)
(2)然后在.vscode文件夹里再新建文件,命名为c_cpp_properties.json
(3)然后在该文件里输入以下内容
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/home/tanzongxuan/extern/pybind11/include", // 你自己的pybind11的include路径,然后ctrl+s保存(这一步必须执行!否则这个文件不会生效!)
"/usr/include/python3.8", // Python 头文件
"/usr/local/include"
],
"defines": [],
"compilerPath": "/usr/bin/g++",
"cStandard": "gnu17",
"cppStandard": "gnu++17", // pybind11 需要 C++11 或更高版本
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
三.配置CMake文件
3.1 同样在pybind11同级的目录下,新建文件CMakeLists.txt,内容如下
cmake_minimum_required(VERSION 3.5.1)
project(example)
add_subdirectory(pybind11)
pybind11_add_module(example example.cpp)
SET( CMAKE_CXX_FLAGS "-std=c++ -03")
同样记得ctrl+s保存
四.开始编译
打开终端,输入指令
cd extern
mkdir build
cd build
cmake ..
make
此时如果成功编译的话,会生成一个example.cpython-38-x86_64-linux-gnu.so(类似这个名字,保证是so文件即可)文件
五.将so文件导入python库目录
如果没有这一步,import的时候是无法识别到example的
(1)在example.cpp同级目录下,新建py文件,命名不能与example.cpp相同,否则会和编译的example模块冲突而无法运行,这里为了直观,命名为text_example
(2)随便导入一个原有的python包(在text_example.py里操作),例如import numpy,然后crtl+鼠标左键点击查看,找到numpy的上一级目录,我这里是dist-packages

(3)获得权限(没有这一步,是无法复制的)
打开终端,输入指令
sudo chown -R $USER:$USER 目标文件夹路径 //这里是/usr/lib/python3/dist-packages
(4)将刚刚build获得的so文件复制到/usr/lib/python3/dist-packages(目标文件夹路径)
六.开始测试
在VScode里打开刚刚新建的text_example.py,输入
import example
print(example.add(2,3))
ctrl+s保存后开始运行,如果没问题的话,就会输出5了
安装和测试步骤到此结束,附上项目结构
extern/
|——_pycache_
|——.vscode/
|——c_cpp_properties.json
|——build
|——pybind11
|——CMakeLists.txt
|——example.cpp
|——text_example.py
七.结语
配环境真的好烦啊!!!不过成功的那一刻还是很有成就感的哈哈哈。这篇是我第一次在CSDN发表的文章(将开源精神进行到底),可能会存在很多问题,有什么不恰当的地方希望各位大佬手下留情,如果可以留下宝贵的意见就更好了。就行这样吧,希望我自己在安装Pybind11时的一些做法和经验能帮到大家!最后再次感谢大佬!大家也可以去看看这位大佬的文章。点击跳转(如有侵权,如有侵权请联系作者删除)
&spm=1001.2101.3001.5002&articleId=149260975&d=1&t=3&u=c17b60dd4beb42f2bc6c1ad00049ed5f)
1万+

被折叠的 条评论
为什么被折叠?



