QT调用python脚本时遇到的坑(十一大坑全有)

前言: 由于项目的需求需要在开发的上位机上调用python脚本
项目需求:QT需要调用python的脚本进行开发,但是开始入门的时候按照网上的教程进行一个简单的hello程序都会出错,下面来记录一下。

位数的坑:
首先因为做的项目要调用一个仪器的动态链接库,而那个动态链接库的位数是32位的,并且是VS编译生成的,所以我选的QT就是MSVC32位编译器,这就导致了后面的问题。大家知道我们的电脑一般都是64位的,64位的电脑可以安装32位也可以安装64位的,但是安装64位的软件运行效率会更高,所以当我用python做开发的时候,我就选择了64位的anaconda安装包,所以安装的python的库也都是64位的,所以我导入python的lib静态库时就一直导不进去,但是显示编译并没有什么错误。所以如果你想要QT调用你的python程序,那么你的py程序必须是32位的,那么接下来就得下载32位的anaconda了,下载好了,又出现了一个问题,也就是TensorFlow只支持64位的(官网上可以看到),所以你怎么安装TensorFlow都安装不上,这下子就GG了。

所以我们怎么安装:(anaconda + QT 5.8(MSVC64) win7)

推荐一种安装方式: 如果你在Windows开发,并且你用python可能会做一些更加高级的事情,比如调用tensorflow numpy等进行一些开发,这时候推荐的安装: python肯定要装64位的,因为要有TensorFlow,那么QT就也要装64位的,这个64指的是编译器是64位的,并不是说软件是64位的,只要编译器对了就行。

回到主题:QT调用python脚本(简单的hello)---新建的项目是 控制台项目
坑1、首先是.py程序的名称,别命名为test.py,会和python定义的重复的,随便都想,就是别用这个名字,否则不管你里面写什么函数一律找不到,以为它压根读到的就不是这个文件。

坑2、加上: Py_SetPythonHome((const wchar_t *)(L"D:/anaconda")); 这句话,否则你会看到这样的error:modulenotfounderror: no module named 'encodings' ,不是编码的问题,就是没找到你python的根目录

坑3、怎么导入静态库: Pro文件下右键--添加库--然后外部库--然后看图--

 

 

 

坑4、如果提示你找不到 python37_d.lib 怎么办

那就把libs文件夹下的python37.lib文件,重新拷一份回来并且重命名为python37_d.lib就行了

坑5、提示打不开python.h文件

首先你导入库正确了,就像第三条说的那样做就行,接下来是这里的问题: 你只需要更改下构建的路径就行了,或者更简单的直接将对号去掉构建在当前工程同一个文件夹下。

 

 

坑6、当你做完第五步,你会发现尼玛还有问题,提示的error:error: expected unqualified-id before ';' token

将error展开说是在python中的object.h文件中的slots冲突,天哪,发生了什么?解决吧

原因:由于QT中定义了slots作为关键了,而python3中有使用slot作为变量,所以有冲突

 

 

 

坑7、 你还要将你的.py文件放在和QT的EXE文件在同一目录下,否则还会持续报错

坑8、编译都通过但是没有信息输出,比如:你调用的.py文件中的hello函数,函数要print(“hello world”),进行build之后,控制台没有输出,这句话貌似没有运行,怎么办?先尝试下单步进入(调试模式下),应该会出现 “the CDB process terminated”,这个原因应该就是没有找到相应的动态库也就是.dll文件,我也是很不理解,将anaconda文件夹下的python36.dll文件拷贝到libs文件夹下就解决这个问题了

坑9、当直接运行build之后的.exe文件,有时候会出现这个error:无法启动此程序因为计算机丢失qt5core.dll 。并不是因为我们没有这个文件,因为没有添加到相应的路径;解决办法:在 path坏境变量 中添加路径:

我的是:D:\QT5.8\5.8\msvc2010_64l\bin;D:\QT5.8\Tools\QtCreator\bin

坑10、在安装anaconda时,有一个地方一定要两个勾都打上,将路径添加到响应的path路径中去,不然就会出现 2 中的问题。

如果你忘记了打钩:记得在 用户变量的path (不是系统变量)中添加以下路径:D:\Anaconda3;D:\Anaconda3\Library\mingw-w64\bin;D:\Anaconda3\Library\usr\bin;D:\Anaconda3\Library\bin;

坑11、比如在py文件中import numpy 导入第三方模块时,就会出现打不开对应的文件,这还是路径配置的问题,具体的看坑10 ,按照坑10 的配置 numpy tensorflow都可以正常的进行导入。

参考:

https://blog.csdn.net/yinyuchen1/article/details/77775851

https://blog.csdn.net/lacoucou/article/details/78090603

https://blog.csdn.net/A18373279153/article/details/78745084

https://blog.csdn.net/weixin_37805972/article/details/80355473
————————————————
版权声明:本文为CSDN博主「herr_kun」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/herr_kun/article/details/84570258

posted @   mcwhirr  阅读(2827)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示