封装Python和调用C++模块的坑(使用pyinstaller和pybind11)

2021-03-02 22:26

阅读:502

标签:vat   解决方法   包含   span   部分   type   led   str   ann   

Python 部分

依赖库的 pip 安装

创建虚拟环境并进入虚拟环境:

conda create --name bundle python=3.7
conda activate bundle

在虚拟环境下:

pip install torch===1.3.1 torchvision==0.2.2.post3 -f https://download.pytorch.org/whl/torch_stable.html
pip install opencv-python==4.2.0.32 dlib==19.19.0 pyinstaller==3.6

Pillow 的版本不能过高,需要降级:

pip install --upgrade pillow==6.0.0

setuptools 的版本不能过高,需要降级:

pip install --upgrade setuptools==40.8.0


C++ 部分

pybind11

头文件

  • 在 include 中包含 pybind11 头文件。
  • 把 Python 虚拟环境头文件路径装进来:D:\develop\Anaconda3\envs\bundle\include。

库文件

把 Python 虚拟环境(注意,一定要是 pyinstaller 所在的那个虚拟环境)的库文件目录装进来:D:\develop\Anaconda3\envs\bundle\libs。

加入链接库文件:

_tkinter.lib
python3.lib
python37.lib

暴露接口

 1 #include  2 namespace py = pybind11;
 3 
 4 #include  5 #include "SingleKinect.h"
 6 
 7 
 8 PYBIND11_MODULE(main, m) {
 9 // shorthand
10 using namespace pybind11::literals;
11 m.doc() = "pybind11 example plugin";
12 
13 // Creating bindings for a custom type
14 py::class_<:singlekinect>(m, "SingleKinect")
15 .def(py::init<:function>int>())
16 .def("Open", &ws_tech::SingleKinect::Open)
17 .def("Running", &ws_tech::SingleKinect::Running)
18 .def("Close", &ws_tech::SingleKinect::Close);
19 }

更改输出类型:动态库、后缀为 pyc。

打包过程问题

pyinstall 打包

pyinstaller -F .\runner.py

必要的运行时库

  • vcruntime140_1.dll

 

参考

  • 总结Pyinstaller的坑及终极解决方法
  • ImportError: cannot import name ‘PILLOW_VERSION‘ from ‘PIL‘
  • New Pillow version (7.0.0) breaks torchvision (ImportError: cannot import name ‘PILLOW_VERSION‘ from ‘PIL‘)
  • ImportError: DLL load failed 高效解决方法 Win10+Python3.7+Anaconda2019.03+tensorflow-gpu2.0/1.14+CUDA10.0

封装Python和调用C++模块的坑(使用pyinstaller和pybind11)

标签:vat   解决方法   包含   span   部分   type   led   str   ann   

原文地址:https://www.cnblogs.com/noluye/p/12367748.html


评论


亲,登录后才可以留言!