Windows下用pybind11生成Python扩展文件
最近研究了一下在Windows环境下怎么基于pybind11生成Python扩展,从而实现Python调用C++代码的目标,这里记录一下自己操作的步骤(pybind文档地址)。
- 在anaconda环境中安装pybind11,我是在自己创建的虚拟环境Registration中做的:
conda activate Registration
pip install pybind11
-
新建visual studio空项目
-
项目-属性-配置为Release,平台为x64
-
常规-目标文件拓展名设置为.pyd,常规-配置类型设置为动态库(.dll)
-
VC++目录-包含目录添加(Registration是我自己的环境名称,其他的类似。如果文件夹设置为其他的环境,那么在Registration环境下会无法运行)
D:\workspace\anaconda\envs\Registration\Lib\site-packages\pybind11\include
D:\workspace\anaconda\envs\Registration\include
VC++目录-库目录添加
D:\workspace\anaconda\envs\Registration\libs
-
链接器-输入-附加依赖项设置添加(也就是D:\workspace\anaconda\envs\Registration\libs中的Python lib,如果设置错误,比如设置为Python 3.8,运行会出错)
python3.lib
python37.lib
-
项目中新建cpp文件,输入
#include <pybind11/pybind11.h>
int add(int i, int j) {
return i + j;
}
PYBIND11_MODULE(MvxWrapper, m) {
m.doc() = "pybind11 example plugin"; // optional module docstring
m.def("add", &add, "A function that adds two numbers");
}
-
生成
-
在x64/Realse文件夹下可以找到生成的pyd文件
-
将pyd文件放置在anaconda的Registration环境的lib文件夹中(放错了Pycharm会找不到)
-
在pycharm中新建项目,设置interpreter为Registration
-
测试
import MvxWrapper
print(MvxWrapper.add(1,2))
- 输出正常