QT运行导入python(pytorch)程序进行深度学习(qmake)

这个问题困扰了四天,终于解决了,记录一下。

1.需要一个完整的python能够运行pytorch环境,这里我已经搭建好了

2.QT需要安装MCSV编译器(必须用这个,因为WINGW不支持.lib的python库)

参考这个教程:

Qt 添加MSVC2017编译器(2022年保姆级教程,不安装完整VS)_qt msvc2017-优快云博客

安装完之后,你的QT会多出几个kit,你需要使用64位的MSVC的编译器

配置完之后,开始QT的配置

3.导入PYTHON环境,自己添加一个新的,参数和工作目录不变,执行挡选择你的含有pytorch的python环境

 4.导入python库,参考下面这个文章,很重要

c++Qt Creator调用 python 完整版 + 解决bug过程_qt调用python-优快云博客

5. 最重要的来了:当你导进去之后会出现各种奇怪的报错,全部踩了一遍。

这是由于安装的python为Release版本,而你的C++项目为Debug模式,因此更改你的项目为Release模式。另外需要注意,区分32位和64位,一定按照下图进行设置⭐⭐⭐⭐

6.这里的python程序,就使用上文提到那篇文章的程序,打印hello,这里会显示打不开python文件,需要自己手动添加编译器路径

#include "widget.h"
#include <QApplication>
#include <QCoreApplication>
#include <Python.h>
#include <iostream>
#include <QDebug>
#include <stdio.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    //添加python解释器搜索路径
    PyObject* sysPath = PySys_GetObject("path");
    PyObject* newModulePath = PyUnicode_DecodeFSDefault("D:\\download\\qt_fft\\QChart1");
    PyList_Append(sysPath, newModulePath);
    Py_DECREF(newModulePath);

    PyObject* sysPath1 = PySys_GetObject("path");
    for (Py_ssize_t i = 0; i < PyList_Size(sysPath1); i++) {
        PyObject* path = PyList_GetItem(sysPath1, i);
        qInfo() << "Python Path:" << QString::fromUtf8(PyUnicode_AsUTF8(path));
    }
    PyObject* module=PyImport_ImportModule("testPython");
    if (!module){
        PyErr_Print();  // 打印详细的错误信息
        qInfo()<<"Python file cant open!";
        return -1;
    }
    PyObject* pFunc=PyObject_GetAttrString(module,"hello");
    if (!pFunc){
        qInfo()<<"the Python function cant load!";
        return -1;
    }
    //调用函数
    PyObject_CallFunction(pFunc,NULL);

    Py_Finalize();
    return a.exec();
}

问题1:无法找到python39_d.lib文件:因为处于debug状态下,需要_d文件去支持debug,所以要切换到release

问题2:无法解析的外部符号 __imp___Py_RefTotal,找不到PyObject_GetAttrString,需要从32位的版本切换到64位版本

问题3:Qt报错dependent ‘..\..\..\..\..\..\Qt\5.14.2\msvc2017\include\QtWidgets\QMainWindow‘ does not exist:pro文件添加QMAKE_PROJECT_DEPTH = 0
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值