部署嵌入 python C++程序

Deploying C++ program with python embedded

本文关键字:C++ 程序 python 部署      更新时间:2023-10-16

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

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

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

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

有关分发 Python 的更多详细信息可以在此处找到。

如果我

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

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

在该 setuptools 脚本中,您可以提及依赖项,但这意味着您的客户端应该在他/她的计算机上安装 Python,或者您应该随软件一起发布自己的 Python 版本。

这种功能也可以使用Boost.Python