Pybind11的安装以及一些配置问题的解决方法--保姆级(Linux版)

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本


因为本人需要安装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时的一些做法和经验能帮到大家!最后再次感谢大佬!大家也可以去看看这位大佬的文章。点击跳转(如有侵权,如有侵权请联系作者删除)

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值