环境:python2.7、VS2010
1.C++ 调用Python(Pyc文件) https://blog.csdn.net/stq054188/article/details/82012901 https://blog.csdn.net/weixin_38635391/article/details/89641695 2.C++调用py文件打包发布(不安装python环境运行) https://blog.csdn.net/feixi7358/article/details/102578769 3.VS2010打包发布程序 https://blog.csdn.net/kuangdang178/article/details/8880447 https://blog.csdn.net/luo_aiyang/article/details/79202460
1.Cmd定位到py文件所在的目录 2.输入python -m py_compile XXXXXX.py,生成pyc文件 3.将pyc文件复制到工程目录,将Python2.7的include文件夹和libs文件夹复制到工程目录下 4.属性-链接器-常规-附加库目录,添加libs的路径 5.属性-链接器-附加依赖项,添加python27.Lib 如何在C++中调用python见下:
Py_Initialize(); PyObject* pModule = NULL; PyObject* pFunc = NULL; pModule = PyImport_ImportModule("upper_Clocksync"); pFunc = PyObject_GetAttrString(pModule, "GetRemoteTime"); //创建参数 PyObject* pArgs = PyTuple_New(4); PyTuple_SetItem(pArgs, 0, Py_BuildValue("s", CW2A(Str_HostIP.GetString())));//s-将C字符串转换成Python对象,如果C字符串为空,返回NONE。 PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", _ttoi(Str_HostPort))); PyTuple_SetItem(pArgs, 2, Py_BuildValue("s", CW2A(Str_DestIP.GetString())));//s-将C字符串转换成Python对象,如果C字符串为空,返回NONE。 PyTuple_SetItem(pArgs, 3, Py_BuildValue("i", _ttoi(Str_DestPort))); PyObject* pReturn = NULL; pReturn = PyEval_CallObject(pFunc, pArgs); char* DestTime = ""; PyArg_Parse(pReturn, "s", &DestTime); Py_Finalize();(upper_Clocksync为python文件名,GetRemoteTime为函数名,pArgs为函数参数)
1.下载py2exe 2.使用py2打包,写一个打包脚本(dabao.py)并运行,脚本如下:
from distutils.core import setup import py2exe setup(console=["yourcode.py"])运行
python dabao.py py2exe3.运行上述命令后,会生成dist和build文件夹。 将dist文件夹中的library.zip,为python35.zip或python27.zip,然后将dist文件夹中的东西复制到c++调用py脚本的同级目录 4.最好调试运行的时候开启黑屏,有可能提示缺少site.py与sysconfig.py,去python安装目录下找到并一起放到工程里。
按照https://blog.csdn.net/luo_aiyang/article/details/79202460 注意:1.记得把之前生成的python环境和pyc文件添加进工程 2.根据项目是X86,还是X64架构,有可能会缺少mfc100ud.dll、msvcp100d.dll、msvcr100d.dll,去VS2010安装目录下找。
