时隔一年,C++加python 的混合编程(包括python无环境发布)

时隔一年,上一篇文档比较LOW一点,实现了python2.7的混合编译,可发布无PYTHON环境的机器。发布也是比较LOW,文件特别大。

 

 

编译版本:python 3.7.2(用来编译混合编程的)

发布版本python-3.7.2.post1-embed-win32这个版本用来发布的,因为我们安装的版本实在是太大了。(这个方法也不是最优的,网上还有更优化的,我觉得差不多了能接受了,没有过分优化了)

 

C++ :  VS2015

 

1、创建C++控制台程序

 

C++设置属性页

 

设置输入LIB

 

时隔一年,C++加python 的混合编程(包括python无环境发布)_第1张图片

这个网上的例子还是蛮多的。

 

2 写入代码

C++代码

void Hello()

{

Py_Initialize();//调用Py_Initialize()进行初始化

//Py_SetPythonHome(L"F:\\ocrNew\\ocrDll\\testPython\\Debug");

PyObject * pModule = NULL;

PyObject * pFunc = NULL;

 

pModule = PyImport_ImportModule("testAdd");//调用的Python文件名

cout << pModule;

pFunc = PyObject_GetAttrString(pModule, "Hello");//调用的函数名

PyEval_CallObject(pFunc, NULL);//调用函数,NULL表示参数为空

Py_Finalize();//调用Py_Finalize,和Py_Initialize相对应的.

}

 

int main()

{

 

Hello();

//save_Add();

 

system("pause");

 

    return 0;

}

 

Python代码

 

def Hello():

    print("sfsfsfs")

 

def Add(a, b):

return a + b

 

注意这个python 代码是没有导入任何库文件的。把PYTHON文件和运行程序放到一起。

 

 

时隔一年,C++加python 的混合编程(包括python无环境发布)_第2张图片

 

 

重点是打包的部分

 

基础: print HelloWorld,没有任何其他库文件

 

比较简单粗暴的方法,是把PYTHON的安装目录下的Lib文件夹和DLLs夹以及python**.dll(**代表版本)拷贝到运行目录下,缺点发布的文件太大。

 

 

 

推荐方法:

在官网https://www.python.org/downloads/windows/下载对应版本的embeddable zip file,解压出来改目录名为DLLs,将DLLs目录放在Py_SetPythonHome设置的路径,将解压目录里的python**.dll与python**.zip复制到程序所在目录下。

 

还有更优化的版本:我是最没用再追求:https://blog.csdn.net/wgxh05/article/details/81740696

 

那么如果导入库又采用推荐的方法,我们要怎么做?

 

Python代码

import cv2

def Hello():

    print("sfsfsfs")

 

def Add(a, b):

return a + b

 

 

 

 

 

将安装包里对应的库找到后拷贝到python37.zip里面

 

 

时隔一年,C++加python 的混合编程(包括python无环境发布)_第3张图片

 

时隔一年,C++加python 的混合编程(包括python无环境发布)_第4张图片

如果还觉得大怎么办呢?

 

Pyinstaller打包库,可以用pyinstaller的库。打包完成后可以用里面编译好的cv的.pyd文件,只有原来库的一半大小。

 

时隔一年,C++加python 的混合编程(包括python无环境发布)_第5张图片

 

时隔一年,C++加python 的混合编程(包括python无环境发布)_第6张图片

将这个文件拷贝到python37.zip压缩包内。

 

 

你可能感兴趣的:(python)