type
status
date
slug
summary
tags
category
icon
password
Email
文章首发于我的个人博客:欢迎大佬们来逛逛
创建项目
选择创建
qmake
项目:选择创建
MSVC 64bit
版本:首先我们先创建一个普通的
python文件
:注意文件名不要是
test.py
,因为python中存在一个此文件,会产生冲突输入以下内容用于测试python及常用库的导入
配置python环境
选择
工具 - 外部 - 配置
选择
外部工具
点击添加
:添加工具我们需要依次设置这三个参数:
- 执行档:你的
python.exe
的路径,我使用的是anaconda3
的python,因此我的路径是:F:\Tools\Ana\python.exe
- 参数:直接复制粘贴:
%{CurrentDocument:FilePath}
- 工作目录:直接复制粘贴:
%{CurrentDocument:Path}
输入完成后,点击
应用
然后确定
可以给你的环境改个名字:我的是
python3.10
版本.切换到你的python文件中,测试是否正确:
选择
工具 - 外部 - python310
运行如下:说明配置python环境成功,也就是说你以后写的python代码就可以在这个地方直接运行了。
导入CPython包
我们想要真正的在Qt中调用Python,就必须要一个头文件:
<Python.h>
这里面包含了很多Python与C互通的接口。
但是如果我们直接输入:
#include <Python.h>
会报错,根本就找不到!!我们需要导入。
检查以下我们刚才配置环境时,与
Python.exe
同级目录下的 include
文件夹下有没有 Python.h
文件,如果有就说明可以实现。如果没有这个文件,你最好重新选择一个Python.exe,重新实现配置Python环境这一节,因为即使你配置好了环境,但是因为没有这个头文件也无法使用。
如果有,则我们开始导入:
右键项目名称:选择
添加库
。选择添加外部库:
注意这个地方非常重要!!!
我们要填写两个参数:
- 库文件:就是你的
libs
文件夹位置的python310.lib
,我的位于:F:\Tools\Ana\libs\python310.lib
- 包含路径:就是刚才介绍的include的文件夹位置,我的位于:F:\Tools\Ana\include
- 注意其他的地方选择要和我的一样。
点击下一步,完成,接着你就会跳转到
.pro
文件中:并且添加了如下的内容。
其中就包含了我们所需要的 libs 和 include 等配置信息,我们直接保存即可。
其他坑点
Python.h 头文件报错
到这时我们就已经配置完成了,我们现在可以使用
Python.h
了,但是你会发现报一个错误,这是因为Qt的slots 和 python.h这个文件中的这个变量冲突了。我们执行以下操作:
找到
object.h
文件:并且在这个位置修改如下:即添加一个 #undef 和#define 即可。
使用管理员模式保存,这个错误就解决了。
ModuleNotFoundError: No module named 'encodings’ 完美解决
之后我们可以测试以下,输入以下代码:
获取Python文件中的这个函数模块,然后再调用:
但是,之后你就会发现一个惊人的错误:
这是怎么回事,但是我在 anaconda3 中的Python中运行(因为我使用就是这个python)是存在这个模块的:
这并不是你的问题,解决如下:
PYTHONHOME 环境变量是用于指定Python 安装路径的,而 PYTHONPATH 环境变量是用于指定Python 模块搜索路径的
- 首先我们需要规定python的
home
,即使用这样一个函数:注意这里的python安装路径是这样的:F:\Tools\Ana
之后我们就解决了!!!但是这样做是不兼容的,因为我们如果要将项目打包发给别人,别人可没有这个路径!!!因此这个路径只能有你自己拥有,换句话说如果我们不写这一条语句就好了!!!改用环境变量!!
- 添加系统环境变量:PYTHONHOME=F:\\Tools\\Ana
之后你把上面这条语句直接删除即可,注意:添加环境变量可能需要重启电脑生效,请耐心等待!
看到了吗,我们已经删除了并且不会出现这个报错了!
找不到python文件
但是我们又出现了一个新的错误,即加载python时找不到这个文件,注意我的
testPython
是python文件名,不要加 .py后缀。这个问题是由于你的 qt生成的 .exe 程序找不到这个python文件,把他们放到同一目录下即可:
如何找到这个路径不用我多说了吧!!
成功!
参考链接:
- 作者:Yuleo
- 链接:https://www.helloylh.com/article/76e634e8-f87a-4b47-8c19-104a7ed5ca06
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。