主要用于C++和python之间的相互调用 是一轻量级仅标头库,语法类似Boost.Python使用编译时自动推断类型 剥离了与绑定生成无关的所有内容,超越Boost.Python 简化了绑定代码
1.2.python中安装:pip install pybind11
1.3.VC中安装:
1.3.1.Windows系统: 
    Microsoft Visaul Studio 2017 x64 
    Anaconda3 , with python 3.8 
1.3.2.Pybind11安装:
 pybind11是 header-only的,因此不需要编译动态链接库,直接使用即可
 1)下载pybind11 https://github.com/pybind/pybind11解压到C:\pybind11-master
 2)环境变量添加:  
  C:\ProgramData\Anaconda3;
  C:\ProgramData\Anaconda3\Library\mingw-w64\bin;
  C:\ProgramData\Anaconda3\Library\usr\bin;
  C:\ProgramData\Anaconda3\Library\bin;
  C:\ProgramData\Anaconda3\Scripts;
  C:\ProgramData\Anaconda3\Lib\site-packages;
  C:\ProgramData\Anaconda3\Lib\site-packages\numpy\core\include; 
  C:\ProgramData\Anaconda3\pkgs\mkl-2020.0-166\Library\bin;
  C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64;
  C:\swigwin;
  C:\opencv\build\x64\vc15\bin;
  C:\opencv\build\x64\vc15\lib;
  C:\opencv\build\include;
  C:\opencv\build\include\opencv2;
  C:\pybind11-master\include;  
3)windows下python环境变量设置
      Admin用户变量:PYTHONHOME  C:\ProgramData\Anaconda3
                                    PYTHONPATH  C:\ProgramData\Anaconda3\Lib\site-packages 
2.使用VS2017测试
2.1.使用C++编写python扩展(python调用C++)新建一个vs c++工程
2.2.工程配置:
 1)设置编译输出类型 
      配置属性--常规--常规--目标文件扩展名:.pyd
      配置属性--常规--项目默认值-配置类型:动态库.dll
 2)添加include包含: 
      配置属性--VC++目录--常规--包含目录:
      C:\pybind11-master\include
      C:\ProgramData\Anaconda3\include
 3)链接器配置:
      链接器-常规-附加库目录:C:\ProgramData\Anaconda3\libs
      链接器-输入-附加依赖项:python3.lib
2.3.C++代码编译:
方法1:VS2017

方法2:MinGW64

    查看版本:C:\Users\Administrator>g++ --version     //8.1.0
	编译文件:C:\Users\Administrator\Desktop\ProjectSwigWin\testSwig>compile.bat
	生成文件:在当前目录下生成example.pyd;拷贝到python同级目录下
	python测试:
		#将example.pyd拷贝到python同级目录下
		C:\Fastener\Camera\test.py
		C:\Fastener\Camera\example.pyd
		import Camera.example as e
		print(e.add(10,2))#12
		print(e.sub(10,2))#8
文件夹结构:
		C:\Users\Administrator\Desktop\ProjectSwigWin\testSwig>
		example1.h
		example1.cpp
		example.cpp
		compile.bat

文件内容:

//example1.h
		#pragma once
		int sub(int, int);
//example1.cpp
		#include "example1.h"
		int sub(int x, int y) { return x - y; }
	//example.cpp
		#include <pybind11/pybind11.h>
		#include "example1.h"
		namespace py = pybind11;
		int add(int i, int j) {return i + j;}
		PYBIND11_MODULE(example, m) {
			m.doc() = "pybind11 example plugin"; // optional module docstring
			m.def("add", &add, "A function which adds two numbers");
			m.def("sub", &sub, "A function which adds two numbers");
//compile.bat
		::将多个C++原文件打包成动态库供python调用
		::后缀为pyd,模块名要与pybind11中的模块名一致PYBIND11_MODULE(模块名, m)
		::作者:tcy
		g++ ^
		-O3 -Wall -static -shared -std=c++17 ^
		-DMS_WIN64 -fPIC -I C:\pybind11-master\include ^
		-I C:\ProgramData\Anaconda3\include ^
		-L C:\ProgramData\Anaconda3\libs example1.cpp example.cpp ^
		-o example.pyd -lPython38
Pybind11算是目前最方便的Python调用C++的工具了, 介绍一下在vs2019上写Python的扩展的HelloWorld 1. 去下载pybind11   https://github.com/pybind/pybind11/releases/tag/v2.3.0  这个库只要include就可以了 2. 用vs新建一个空项目 2.1 调整输出类型为dll, 调整输出文件名为pyd 2.2 include python和pybind11的头文件, 我的python使用anaconda的全家桶 2.3 链接 python的lib 2.4 linker里添加python的lib
本人最近在做图像处理,需要C++和python之间相互转换,用opencv做基础图形处理需要Mat和numpy相互转换,先前用swig,boost.python,及python CAPI 发现都没有pybind11,函数封装非常简洁易懂,采用模板封装,不怎么设置,非常好用,推荐给大家。欢迎大家讨论有什么好的方法共同分享。 1.目录: 1.Windows10 pybind11安装环境配置VS2017,MinGW64编译 tcy 2.Windows10 pybind11 C++导出变量 (tcy