首页 > 编程语言 >QT 调用python环境配置

QT 调用python环境配置

时间:2023-03-21 09:24:35浏览次数:32  
标签:调用 QT PyType python Py int DEBUG define

一、安装好python环境(python或anaconda都可)

  打包将python环境相关文件到一个文件夹中,如下图所示:

  打包的文件路径:

  

 

 生成的依赖包目录结构:

二、在QT工程中配置python环境

2.1工程文件(.pro)中加入库路径

INCLUDEPATH += $$PWD/Bin/Python3/include
LIBS += -L$$PWD/Bin/Python3/libs -lpython3 -lpython39

  包结构如步骤一所示 

 2.2 解决编译报错

  在项目中添加头文件(#include "Python.h")之后编译会报错,无法解析的外部符号 __imp___Py_RefTotal
无法解析的外部符号 __imp___Py_NegativeRefcount,该符号在函数 __import_array 中被引用。

  解决编译报错,需要对拷贝过来的文件夹python39/include里面的object.h和pyconfig.h 两个文件进行修改:

  1)object.h

修改:

#if defined(Py_DEBUG) && !defined(Py_REF_DEBUG)
#define Py_REF_DEBUG
#endif

#if defined(Py_DEBUG) && !defined(Py_REF_DEBUG)
//#define Py_REF_DEBUG
#endif

修改

typedef struct{
const char* name;
int basicsize;
int itemsize;
unsigned int flags;
PyType_Slot *slots; /* terminated by slot==0. */
} PyType_Spec;

为:

#undef slots
typedef struct{
const char* name;
int basicsize;
int itemsize;
unsigned int flags;
PyType_Slot *slots; /* terminated by slot==0. */
} PyType_Spec;
#define slots Q_SLOTS

  2)pyconfig.h

#ifdef _DEBUG
# define Py_DEBUG
#endif

改为

#ifdef _DEBUG
//# define Py_DEBUG
#endif

2.3 调用python代码测试

    QString path = QApplication::applicationDirPath() + "/Python3";
    auto homePath = (wchar_t*)reinterpret_cast<const wchar_t*>(path.utf16());
    Py_SetPythonHome(homePath);        //将python路径加入python环境变量
    Py_Initialize();                //初始化
    if(!Py_IsInitialized())            //判断初始化是否成功
    {
//        qDebug() << "init python failed:" << path;
    }
//    qDebug() << "init python success:" << path;
    PyRun_SimpleString("import sys"); //引入sys模块
    PyRun_SimpleString("sys.path.append('./')"); //将存放python文件的路径加入搜寻路径

 

标签:调用,QT,PyType,python,Py,int,DEBUG,define
From: https://www.cnblogs.com/xian-yongchao/p/17238684.html

相关文章

  • Python之collections模块
    简介collections是python的内置模块,提供了很多方便且高性能的关于集合的操作,掌握这些知识有助于提高代码的性能和可读性。常用功能计数器(Counter)​双端队列(deque)......
  • python爬虫如何构建基础爬虫思路
    对于长期游弋于大数据中的程序来说,正常来说基础爬虫有5个模块,通过多个文件相互间配合,然而实现一个相对完善的爬虫方案,以便于后期做更完善的爬虫方案做准备。这里目的是爬......
  • python基础
    基本数据类型数字(number)字符串列表字典元组集合循环语句......
  • python基础语法学习
    这里主要记录主要的python语法。1.编码python3默认时UTF-8编码,也可以为源文件指定不同的编码(使用Windows-1252字符集中的字符编码):#-*-coding:cp-1252-*-2.注......
  • python 报错"ValueError: dictionary update sequence element #0 has length 6; 2 is
    python报错"ValueError:dictionaryupdatesequenceelement#0haslength6;2isrequired"现象   分析根据报错分析,应该是字典或格式有问题,检查发现LOGGING......
  • PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SV
    全文下载链接:http://tecdat.cn/?p=26219最近我们被客户要求撰写关于银行机器学习的研究报告,包括一些图形和统计输出。该数据与银行机构的直接营销活动相关,营销活动基于电......
  • python学习第一天
    1.python的数据类型(1)python的数据类型不需要单独定义,可以直接对变量赋值而自动判断该类型(我们可以通过type进行查看);(2)一般的数据类型:int(整型),str(字符串类型),bool(布尔类型),fl......
  • python命令
    我们在使用npminstall安装模块的模块的时候,一般会使用下面这几种命令形式:npminstallmoduleName#安装模块到项目目录下npminstall-gmoduleName#-g的意思......
  • python - tesseract-ocr
    1.安装tesseract-ocr下载链接:https://digi.bib.uni-mannheim.de/tesseract/安装后添加环境变量测试安装情况2.安装pytesseractpip3installpytesseract-ihttps......
  • 使用python来模拟端口被占用的测试场景
    一、测试场景拿到一个运维如软件,做安装部署测试。其中,测试过程中存在一种场景:由于环境清理不干净等原因,导致软件安装部署时,某个组件的端口号被占用,而导致部署失败的情况。......