部署嵌入了python的C ++程序

时间:2017-10-27 06:48:15

标签: python c++ windows qt

我有一个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)?或者没有发送脚本的其他方式。

2 个答案:

答案 0 :(得分:1)

如果没有静态编译Python脚本,则需要分发:

  • requirements.txt(适用于脚本所需的所有库/模块)。
  • 脚本所需的正确Python版本的详细信息(2.7 / 3等)。

或者你可以考虑使用py2exe创建一个可执行文件,然后分发它,尽管你需要修改你的程序与Python脚本交互的方式。

有关分发Python can be found here的一些进一步细节。

答案 1 :(得分:0)

如果我是你,我会用某种安装程序来做。

现在,在该安装程序中,您当然可以嵌入脚本的wheel版本,此外还将使用setuptools进行安装。

在那个setuptools脚本中你可以提到依赖关系,但这意味着你的客户端应该在他/她的计算机上安装Python,或者你应该发布自己的嵌入了该软件的Python版本。

使用Boost.Python

也可以实现此类功能