当前位置: 首页 > news >正文

C++调用Python Win10 Miniconda虚拟环境配置

目录

      • 前言
      • 1. Win10 安装 Miniconda
      • 2. 创建虚拟环境
      • 3. 配置C++调用python环境
      • 4. C++调用Python带参函数
      • 5.遇到的问题
      • 6. 总结

前言

本文记录了Win10 系统下Qt 应用程序调用Python时配置Miniconda虚拟环境的过程及遇到的问题,通过配置Python虚拟环境,简化了Qt应用程序的部署。

1. Win10 安装 Miniconda

首先下载Windows 版Miniconda,https://docs.conda.io/en/latest/miniconda.html
在这里插入图片描述
下载完成后,双击安装,选择安装位置,然后一直点下一步,安装完成后在开始菜单中增加了两个打开Miniconda终端的菜单项,如下图
在这里插入图片描述

2. 创建虚拟环境

新建Qt工程pythondemo,在pro文件中添加程序生成目录 DESTDIR

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += console
TARGET = pythondemo
TEMPLATE = app
DESTDIR = $$PWD/binSOURCES += \main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.ui

编译并运行程序,可以看到在bin目录下生成了可执行程序。在bin目录下新建python目录,然后在开始菜单中找到 **Anaconda Prompt(miniconda3)**打开一个Python终端,默认激活的是base虚拟环境。使用如下命令创建指定路径,指定Python版本的虚拟环境:

conda create --prefix  C:\develop\QT\pythondemo\bin\python\env python=3.8

激活虚拟环境:

 conda activate C:\develop\QT\pythondemo\bin\python\env   

虚拟环境中默认安装了pip,可以使用pip install xxxpackage 命令安装Python依赖包。
在这里插入图片描述

3. 配置C++调用python环境

首先修改pro文件,添加 Python 头文件的路径和依赖的lib库,并将bin/python/env目录下的python38.dll 和 python3.dll复制到bin目录下。pro文件增加如下配置

INCLUDEPATH += $$PWD/bin/python/env/include
LIBS += -L$$PWD/bin/python/env/libs \-lpython38 -lpython3

初始化 Python 环境,并在程序中设置 PythonHome 环境变量,如何知道PythonHome环境变量需要设置哪些路径呢?这里需要参考虚拟环境的环境变量值。在激活的 bin\python\env 虚拟环境下运行Python解释器,打印虚拟环境的path值,如下图所示:
在这里插入图片描述

在代码中设置PythonHome 并初始化Python环境,代码如下:

    QString pythonHome = qApp->applicationDirPath() + "/python/env";pythonHome.append(";");pythonHome.append(qApp->applicationDirPath() + "/python/env/python38.zip");pythonHome.append(";");pythonHome.append(qApp->applicationDirPath() + "/python/env/DLLs");pythonHome.append(";");pythonHome.append(qApp->applicationDirPath() + "/python/env/lib");pythonHome.append(";");pythonHome.append(qApp->applicationDirPath() + "/python/env/lib/site-packages");wchar_t pythonHomeWchar[1500];memset(pythonHomeWchar, 0, sizeof(pythonHomeWchar));pythonHome.toWCharArray(pythonHomeWchar);//设置PythonHome环境变量Py_SetPythonHome(pythonHomeWchar);//初始化Python C APIPy_Initialize();if(Py_IsInitialized()){qDebug() << "python env init !";}

4. C++调用Python带参函数

创建testPython.py文件,并添加一个带参数的测试函数,如下

def writeData(data):print(data)

下面的代码演示了如何设置应用程序python脚本路径,导入Python模块,获取模块中定义的函数,设置函数参数及调用函数。

 //应用程序python脚本路径QString pyfilePath = QString::fromLocal8Bit("sys.path.append('%1')").arg(qApp->applicationDirPath() + "/python");PyRun_SimpleString(pyfilePath.toLocal8Bit().data());//导入python模块PyObject* pWriteWordModule = PyImport_ImportModule("testPython");if(!pWriteWordModule){qDebug() << "import module faild!";PyErr_Print();}//获取testPython模块中的函数PyObject *pFunc = PyObject_GetAttrString(pWriteWordModule, "writeData");if(!pFunc){qDebug() << "get func faild!";}//设置函数参数PyObject *pTuple = PyTuple_New(1);PyTuple_SetItem(pTuple, 0, Py_BuildValue("s", "hello python !"));//调用函数PyObject_CallObject(pFunc, pTuple);

5.遇到的问题

在配置好pro文件编译qt工程时遇到如下图所示的错误,原因是object中定义的slots与qt的slots定义冲突,解决方法是添加下面第二张图所示的两行代码,先取消slots宏定义,然后再重新define,可解决这个问题。
在这里插入图片描述

在这里插入图片描述

6. 总结

以上就是本文的所有内容了,完整的demo可以从这里下载C++调用Python Miniconda虚拟环境,如果对C++调用Python环境配置有任何疑问,欢迎留言讨论。

相关文章:

C++调用Python Win10 Miniconda虚拟环境配置

目录 前言1. Win10 安装 Miniconda2. 创建虚拟环境3. 配置C调用python环境4. C调用Python带参函数5.遇到的问题6. 总结 前言 本文记录了Win10 系统下Qt 应用程序调用Python时配置Miniconda虚拟环境的过程及遇到的问题&#xff0c;通过配置Python虚拟环境&#xff0c;简化了Qt应…...

从0到1学会Git(第一部分):Git的下载和初始化配置

1.Git是什么: 首先我们看一下百度百科的介绍:Git&#xff08;读音为/gɪt/&#xff09;是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 …...

【记录】手机QQ和电脑QQ里的emoji种类有什么差异?

版本 手机 QQ&#xff1a;V 8.9.76.12115 电脑 QQ&#xff1a;QQ9.7.15&#xff08;29157&#xff09; 偶然发现&#xff0c;有一种emoji手机上怎么找都找不到&#xff0c;一开始以为自己失忆了&#xff0c;后来发现这种emoji只在电脑上有。 接下来简单说一下找emoji差异的方式…...

blender界面认识01

学习视频 【基础篇】1.2 让手听话_哔哩哔哩_bilibili 目录 控制视角 控制物体 选择对象1 小结 控制视角 长按鼠标中键-----视角旋转 shift鼠标中键-----视角平移 滚动鼠标中键-----视角缩放 也可以通过界面的快捷工具实现 这个视角旋转有一点像catia中罗盘&#xff0c…...

TCP数据报结构分析(面试重点)

在传输层中有UDP和TCP两个重要的协议&#xff0c;下面将针对TCP数据报的结构进行分析 关于UDP数据报的结构分析推荐看UDP数据报结构分析&#xff08;面试重点&#xff09; TCP结构图示 TCP报头结构的分析 一.16位源端口号 源端口表示发送数据时&#xff0c;发送方的端口号&am…...

合并两个有序的单链表,合并之后的链表依然有序

定义节点 class ListNode {var next: ListNode _var x: Int _def this(x: Int) {thisthis.x x}override def toString: String s"x>$x" } 定义方法 class LinkedList {var head new ListNode(0)def getHead(): ListNode this.headdef add(listNode: Li…...

eureka迁移到nacos--双服务中心注册

服务注册中心的迁移有多种方式&#xff0c;官网使用nacos sync&#xff0c;还有民间开发的双注册中心组件eureka-nacos-proxy&#xff0c;但是我用了不太顺利&#xff0c;所以用的是阿里巴巴的双注册中心组件edas-sc-migration-starter spring boot&#xff1a;2.5.3 引入依赖 …...

线程池使用不规范导致线程数大以及@Async的规范使用

文章详细内容来自&#xff1a;线程数突增&#xff01;领导&#xff1a;谁再这么写就滚蛋&#xff01; 下面是看完后文章的&#xff0c;一个总结 线程池的使用不规范&#xff0c;导致程序中线程数不下降&#xff0c;线程数量大。 临时变量的接口&#xff0c;通过下面简单的线…...

启莱OA treelist.aspx SQL注入

子曰&#xff1a;“为政以德&#xff0c;譬如北辰&#xff0c;居其所&#xff0c;而众星共之。” 漏洞复现 访问漏洞url&#xff1a; 使用SQLmap对参数 user 进行注入 漏洞证明&#xff1a; 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教&#xff0c;万分感…...

ES是一个分布式全文检索框架,隐藏了复杂的处理机制,核心数据分片机制、集群发现、分片负载均衡请求路由

ES是一个分布式框架&#xff0c;隐藏了复杂的处理机制&#xff0c;核心数据分片机制、集群发现、分片负载均衡请求路由。 ES的高可用架构&#xff0c;总体如下图&#xff1a; 说明&#xff1a;本文会以pdf格式持续更新&#xff0c;更多最新尼恩3高pdf笔记&#xff0c;请从下面…...

xml和json互转工具类

分享一个json与xml互转的工具类&#xff0c;非常好用 一、maven依赖 <!-->json 和 xm 互转</!--><dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.3</version></dependency&g…...

Windows系统下MMDeploy预编译包的使用

Windows系统下MMDeploy预编译包的使用 MMDeploy步入v1版本后安装/使用难度大幅下降&#xff0c;这里以部署MMDetection项目的Faster R-CNN模型为例&#xff0c;将PyTorch模型转换为ONNX进而转换为Engine模型&#xff0c;部署到TensorRT后端&#xff0c;实现高效推理&#xff0c…...

yolov5自定义模型训练二

前期准备好了用于训练识别是否有火灾的数据集后就可以开始修改yolo相关文件来进行训练 数据集放到yolov5目录里 在data目录下新建yaml文件设置数据集信息如下 在model文件夹下新增新的model文件 开始训练 训练出错 确认后是对训练数据集文件夹里的文件名字有要求&#xff0c;原…...

Spring框架获取用户真实IP(注解式)

文章目录 一、最终使用效果&#xff08;ClientIp 注解获取&#xff09;二、实现代码1.注解2.方法参数解析器&#xff08;Resolver&#xff09;3.全局增加Resolver配置 Spring 框架没有现成工具可以方便提取客户端的IP地址&#xff0c;普遍做法就是通过 HttpServletRequest 的 g…...

利用 IDEA IDE 的轻量编辑模式快速查看和编辑工程外的文本文件

作为程序员, 我们都知道 IDE 的很好用的, 它的文本编辑器功能也非常的强大, 用起来非常便捷. 在长年累月的使用中, 我们也变得对其非常熟悉, 以致于使用起其它简单地轻量级的文本编辑器来, 比如什么记事本, Notepad, UltraEdit 等等呀, 觉得既不方便又不熟悉. 关键是很多的操作…...

MyBatisx代码生成

MyBatisx代码生成 1.创建数据库表 CREATE TABLE sys_good (good_id int(11) NOT NULL,good_name varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,good_desc varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,PRIMARY KEY (good_id) ) ENGINEInnoDB DEFAULT CHA…...

【日记】文章更新计划

首发博客地址[1] 状态 这两天也没加班&#xff0c;也没干什么活。不知道怎么回事&#xff0c;到家就想睡觉。所以这两天睡得很早&#xff0c;基本上 11 点之前就睡了&#xff0c;文章也就鸽了两天。 计划 今早起来感觉还是要自律&#xff0c;我写文章的初衷是为了学习。基于这个…...

UML用例图三种关系(重点)-架构真题(十七)

某项目包括A、B、C、D四道工序&#xff0c;各道工序之间的衔接关系、正常进度下各工序所需的时间和直接费用、赶工进度下所需的时间和直接费用如下表所示。该项目每天需要间接费用为4.5万元&#xff0c;根据此表&#xff0c;最低成本完成需要&#xff08;&#xff09;天。&…...

分层解耦介绍

三层架构 Controller&#xff1a;控制层&#xff0c;接受前端发送的请求&#xff0c;对请求进行处理&#xff0c;并响应数据 service&#xff1a;业务逻辑层&#xff0c;处理具体业务逻辑 dao&#xff1a;数据访问层&#xff0c;负责数据访问操作&#xff0c;包括数据的增、删、…...

Nginx百科之gzip压缩、黑白名单、防盗链、零拷贝、跨域、双机热备

引言 早期的业务都是基于单体节点部署&#xff0c;由于前期访问流量不大&#xff0c;因此单体结构也可满足需求&#xff0c;但随着业务增长&#xff0c;流量也越来越大&#xff0c;那么最终单台服务器受到的访问压力也会逐步增高。时间一长&#xff0c;单台服务器性能无法跟上业…...

Hyper-V DDA图形工具:告别PowerShell命令行的设备直通新时代

Hyper-V DDA图形工具&#xff1a;告别PowerShell命令行的设备直通新时代 【免费下载链接】DDA 实现Hyper-V离散设备分配功能的图形界面工具。A GUI Tool For Hyper-Vs Discrete Device Assignment(DDA). 项目地址: https://gitcode.com/gh_mirrors/dd/DDA 还在为Hyper-…...

基于Arduino与GPS的物联网数据采集器:从硬件搭建到地图可视化

1. 项目概述&#xff1a;一个硬件极客的万圣节“寻宝图” 又到万圣节了&#xff0c;除了琢磨穿什么奇装异服&#xff0c;你是不是也在头疼怎么规划“不给糖就捣蛋”的路线&#xff1f;每年都像开盲盒&#xff0c;有的门口堆满南瓜灯的人家只给了一根棒棒糖&#xff0c;而某个其…...

用ZYNQ和LWIP搞定8路ADS8681数据采集:从Vivado Block Design到上位机TCP通信的完整流程

ZYNQ与LWIP构建的8通道高速数据采集系统实战指南 在工业自动化、测试测量和科研领域&#xff0c;多通道高精度数据采集系统正变得越来越重要。本文将详细介绍如何利用Xilinx ZYNQ SoC和LWIP协议栈&#xff0c;构建一个支持8路ADS8681同步采集的实时数据传输系统。不同于简单的代…...

AI应用开发利器:ai-devkit工具包核心功能与工程实践指南

1. 项目概述与核心价值最近在折腾AI应用开发&#xff0c;发现一个挺有意思的项目&#xff0c;叫codeaholicguy/ai-devkit。乍一看名字&#xff0c;你可能会觉得这又是一个“AI开发工具包”&#xff0c;市面上类似的工具已经多如牛毛了。但深入用下来&#xff0c;我发现它不太一…...

DownKyi完全指南:三步解锁B站8K视频下载的终极方案

DownKyi完全指南&#xff1a;三步解锁B站8K视频下载的终极方案 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff…...

Excel MCP Server终极指南:让AI成为你的Excel自动化助手

Excel MCP Server终极指南&#xff1a;让AI成为你的Excel自动化助手 【免费下载链接】excel-mcp-server A Model Context Protocol server for Excel file manipulation 项目地址: https://gitcode.com/gh_mirrors/ex/excel-mcp-server 你是否厌倦了重复的Excel操作&…...

开源技能库构建指南:Git+Markdown+Docsify打造个人技术知识体系

1. 项目概述&#xff1a;一个开源技能库的诞生与价值在技术领域&#xff0c;尤其是软件开发、运维和数据分析等方向&#xff0c;我们每天都在与海量的工具、框架和命令打交道。时间一长&#xff0c;一个很现实的问题就摆在了面前&#xff1a;那些曾经花了好几个小时才调通的复杂…...

如何3分钟搭建智能手机号定位系统:免费归属地查询终极指南

如何3分钟搭建智能手机号定位系统&#xff1a;免费归属地查询终极指南 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_…...

Godot游戏集成Discord状态:RPC插件原理与实战指南

1. 项目概述&#xff1a;在Godot引擎中点亮你的Discord状态 如果你是一名独立游戏开发者&#xff0c;或者正在用Godot引擎捣鼓一些有趣的个人项目&#xff0c;你可能会想让你的朋友或社区成员知道你现在正在“玩”什么。不是通过截图发到社交媒体&#xff0c;而是更实时、更优…...

PAC技术演进与核心趋势:从多域控制到边缘智能的工业自动化平台

1. 项目概述&#xff1a;为什么今天还要聊PAC&#xff1f;如果你在工业自动化、楼宇控制或者任何涉及逻辑控制的领域工作&#xff0c;那么“PAC”这个词对你来说应该不陌生。但很多时候&#xff0c;它就像一个熟悉的陌生人——大家好像都知道它&#xff0c;但真要细说它现在发展…...