入职前有关Pybind的学习,用时接近一天,终于把这块拿下了,心累!!!必须记录下来!
一、pybind相关基本知识
pybind11是一个轻量级的仅头文件库,是一个只有标题的库,因此不需要链接任何特殊的库,主要用于创建现有C++代码的Python绑定。可将pybind11库视为Boost.Python的一个小型自包含版本,其中剥离了与绑定生成无关的所有内容,依赖于python(2.7或3.5+)和C++标准库。
pybind11核心功能:pybind11可以将C++功能映射到Python。
pybind11支持的编译器:
(1).Clang/LLVM 3.3或更高版本;
(2).GCC 4.8或更高版本:注:编译2.9.1版本的test,GCC需要5以上版本;
(3).Visual Studio 2015或更高版本。
pybind11的安装:
(1).通过conda,执行:conda install -c conda-forge pybind11
(2).通过pip,执行:pip install pybind11
(3)官网下载源码(本次实践所用,下载地址是D:\VS2019code)
Linux:python dev/python3 dev、cmake
macOS(附带python):cmake
Windows:Visual Studio 2017及其更新版
二、实践结果总结

  1. 环境:
    Window 10
    visual stdio 2019
    pybind11 2.9.0
    Pycharm 2019.2.1
    Cmake 3.23.2
    2.配置过程:
    (1)官网上下载pybind11:https://github.com/pybind/pybind11 (2)在anaconda上创建一个新的环境envTest1。
    创建命令是 conda create -n envTest1 python=3.7
    查看环境是否创建成功:conda env list
    (3)创建成功后该环境地址为D:\anaconda\envs\envTest1,在envTest1文件夹下创建一个新的文件夹C++Project.
  2. python bins什么意思 python bind_python

  3. (4)打开vs2019,创建一个空项目,项目名称为TesePybind,地址为D:\anaconda\envs\envTest1\C++project\TesePybind。
  4. python bins什么意思 python bind_python bins什么意思_02

  5. (5)将刚开始下载好的pybind源码压缩包进行解压,得到pybind11-master文件,将这整个文件复制到D:\anaconda\envs\envTest1\C++project\TesePybind 中,并重命名为pybind11。
  6. python bins什么意思 python bind_Python_03

  7. (6)开始配置vs2019
    1)右键项目Tesepybind-属性
  8. python bins什么意思 python bind_visual studio_04

  9. 2)常规选项中,将配置类型设置为动态库(.dll):
  10. python bins什么意思 python bind_visual studio_05

  11. 3)在VC++目录中修改包含目录,其中红框中需填上新环境envTest1下include的目录以及TesePybind中pybind11下的include的目录(D:\anaconda\envs\envTest1\C++project\TesePybind\pybind11\include),非常重要!!!!
  12. python bins什么意思 python bind_visual studio_06

  13. 4)库目录下填写环境envTest1下的libs目录。
  14. python bins什么意思 python bind_visual studio_07

  15. 5)链接器-输入-附加依赖项中填写环境envTest1的libs中的所有文件目录。我这里有三个:python3.lib、python37.lib、_th=kinter.lib。注:有些资料里填的不是绝对路径,会报错!一定是绝对路径!!!!
  16. python bins什么意思 python bind_python bins什么意思_08

  17. (7)在vs项目TesePybind中创建main.cpp文件和CMakeLists.txt:
  18. python bins什么意思 python bind_python_09


  19. python bins什么意思 python bind_visual studio_10


  20. python bins什么意思 python bind_visual studio_11

  21. 此时,运行main.cpp无报错,说明pybind11配置成功!!!
  22. python bins什么意思 python bind_pycharm_12

  23. (8)配置cmake:
    1)网上下载cmake安装包,我放在C++Project下,解压:
  24. python bins什么意思 python bind_Python_13

  25. 2)打开cmake界面:
  26. python bins什么意思 python bind_python bins什么意思_14

  27. 3)如图填好,下一个中的build会自动创建
  28. python bins什么意思 python bind_pycharm_15

  29. 4)点击左下角configure:
  30. python bins什么意思 python bind_visual studio_16


python bins什么意思 python bind_Python_17


5)出现configuring done时,点击generate后会出现generating done(在configuring done的下一行)。

python bins什么意思 python bind_python bins什么意思_18


python bins什么意思 python bind_pycharm_19


6)点击open Project,会生成一个新工程example(由cmake打开);

python bins什么意思 python bind_Python_20


右击example-生成,会出现:

python bins什么意思 python bind_visual studio_21


此时成功生成pyd文件,注意地址!

python bins什么意思 python bind_Python_22


(9)在envTest1环境中,在pycharm中创建一个新的虚拟环境(pythonProject):file-new project。注意地址!

python bins什么意思 python bind_Python_23


(10)如图所示:

python bins什么意思 python bind_visual studio_24


python bins什么意思 python bind_pycharm_25


(11)虚拟环境建成后,将之前得到的pyd文件复制到环境envTest1的Lib中:

python bins什么意思 python bind_Python_26


(12)在pycharm中新建一个py文件,可以发现此时可以import到example这个库了!!!测试一下,输出结果,完成!!!!!

python bins什么意思 python bind_Python_27


真不容易!!中间出来好几个报错,有惊无险!!