部署嵌入了python的C++程序
Posted
技术标签:
【中文标题】部署嵌入了python的C++程序【英文标题】:Deploying C++ program with python embedded 【发布时间】:2017-10-27 06:48:14 【问题描述】:我有一个 Qt C++ 项目,对于某些功能,我添加了 Python。 C++函数调用python脚本并返回值。如下例所示。
PyObject *pName,*pModule,*pFunc;
PyObject *pArgs,*pValue;
const char *module="getBeamData";
pName=PyUnicode_FromString(module);
pModule=PyImport_Import(pName);
if(pModule!=NULL)
pFunc=PyObject_GetAttrString(pModule,"getBeamDose");
if(pFunc&&PyCallable_Check(pFunc))
pArgs=PyTuple_New(2);
PyTuple_SetItem(pArgs,0,PyBytes_FromString(path.toStdString().c_str()));
PyTuple_SetItem(pArgs,1,PyLong_FromLong(fraction));
pValue=PyObject_CallObject(pFunc,pArgs);
它调用脚本getBeamdata.py。功能工作正常。我是否必须为所有客户和发货脚本安装 python 和库(如 numpy)?或者有没有其他不发送脚本的方法。
【问题讨论】:
【参考方案1】:如果不静态编译您的 Python 脚本,您将需要分发:
requirements.txt(适用于脚本所需的所有库/模块)。 脚本所需的正确 Python 版本(2.7/3 等)的详细信息。或者,您可以考虑使用 py2exe 创建可执行文件并分发它,尽管您需要修改程序与 Python 脚本交互的方式。
有关分发 Python can be found here 的更多详细信息。
【讨论】:
【参考方案2】:如果我是你,我会使用某种安装程序。
现在,在该安装程序中,您当然可以嵌入脚本的 wheel
版本,此外还将使用 setuptools
进行安装。
在 setuptools 脚本中,您可以提及依赖项,但这意味着您的客户应该在他/她的计算机上安装 Python,或者您应该发布您自己的嵌入软件的 Python 版本。
这样的功能也可以使用Boost.Python
来实现
【讨论】:
以上是关于部署嵌入了python的C++程序的主要内容,如果未能解决你的问题,请参考以下文章
将 Python 嵌入到 C++ 应用程序中,无论是不是安装了 Python(在 Windows 上)
如果我想将 Python 嵌入到 C++ 程序中,我应该在我的程序文件夹中放啥?