1、安装anaconda

①、默认安装,安装后它自己会添加环境变量;

②、设置一个虚拟环境,名字为Python_3.9 

conda create -n Python_3.9 python=3.9

注意联网,可以用anaconda安装后自带的cmd执行;环境最终被存放在了D:/Anaconda/envs/Python_3.9

2、配置Qt环境

①、为了方便协同开发,将上面normal文件夹复制到Third_party里

②、新建Qt工程,在pro里设置环境

INCLUDEPATH += $$(Third_Party)/Python_3.9/include

LIBS += -L$$(Third_Party)/Python_3.9/libs -lpython39

3、新建python文件

mypython.py

def Myfun(info):

print('call python file', info) return "hhh"

4、调用python

#include "Python.h" //加入头文件

QString td = QProcessEnvironment:systemEnviroment().value("Third_Party");//获取系统环境变量

QString path = td+"/Python_3.9";

auto homePath = (wchar_t*)reinterpret_cast(path.utf16());

Py_SetPythonHome(homePath); //将python路径加入python环境变量

Py_Initialize(); //初始化

if(!Py_IsInitialized()) //判断初始化是否成功

{

//...

}

PyRun_SimpleString("import sys");//引入sys模块

PyRun_SimpleString("sys.path.append(\"./scpi_data\")");//将存放python文件的路径加入搜寻路径

PyObject* m_pyObj = PyImport_ImportModule("mypython");//将python文件导入成PyObject对象

QString inputPara = "this is paras";

auto ret = PyObject_CallMethod(m_pyObj, "Myfun", "s", inputPara.toStdString().c_str());//调用python中的Myfun函数,返回值是ret,s代表是字符串格式,如果是int则写i,double写d

char* retStr;

PyArg_Parse(ret, "s", &retStr);

qDebug()<

Py_Finalize();//结束

 5、发布

将Python_3.9文件夹放到exe路径,并设置import path为此路径【QCoreApplication::curpath】,Python_3.9里存放:

 

 注意:还需要将python3.dll和python39.dll与exe放一起

PS:

1、可以将m_pyObj 声明为类成员变量,方便整个生命周期使用

2、如果python文件里,某模块没有安装,可以联网下使用pip安装,然后将python环境里:/Lib/site-packetages新下载的两个文件夹复制到Third_Party

3、与PyObject_CallMethod类似的函数还有好几个

4、与PyArg_Parse类似的函数还有好几个,如python返回多个变量可用PyArg_ParseTuple

5、如果在python里打印了信息,在没有调用Py_Finalize前是不会打印的

6、打印异常

PyErr_Print();

 

相关链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。