解决QT C++调用python显示错误ModuleNotFoundError: No module named ‘encodings‘)及打包发布问题

@[TOC](解决QT C++调用python显示错误ModuleNotFoundError: No module named ‘encodings’)及打包发布问题

问题1描述

在QT C++中调用python网上有不少例子,但是怎么操作还是报错。
Python path configuration:
PYTHONHOME = ‘C:\ProgramData\Anaconda3\Scripts’
PYTHONPATH = (not set)
program name = ‘python’
isolated = 0
environment = 1
user site = 1
import site = 1
sys._base_executable = ‘C:\Users\Administrator\Documents\build-testCplusPy-Desktop_Qt_5_15_2_MSVC2019_64bit-Release\release\testCplusPy.exe’
sys.base_prefix = ‘C:\ProgramData\Anaconda3\Scripts’
sys.base_exec_prefix = ‘C:\ProgramData\Anaconda3\Scripts’
sys.executable = ‘C:\Users\Administrator\Documents\build-testCplusPy-Desktop_Qt_5_15_2_MSVC2019_64bit-Release\release\testCplusPy.exe’
sys.prefix = ‘C:\ProgramData\Anaconda3\Scripts’
sys.exec_prefix = ‘C:\ProgramData\Anaconda3\Scripts’
sys.path = [
‘C:\Users\Administrator\Documents\build-testCplusPy-Desktop_Qt_5_15_2_MSVC2019_64bit-Release\release\python38.zip’,
‘C:\ProgramData\Anaconda3\Scripts\DLLs’,
‘C:\ProgramData\Anaconda3\Scripts\lib’,
‘C:\Users\Administrator\Documents\build-testCplusPy-Desktop_Qt_5_15_2_MSVC2019_64bit-Release\release’,
]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named ‘encodings’

Fatal Python error: failed to get the Python codec of the filesystem encoding
Current thread 0x00002c20 (most recent call first):

解决办法

在pro文件中添加库:.

LIBS += -L$$PWD/../../../../ProgramData/Anaconda3/libs/ -lpython38

INCLUDEPATH += $$PWD/../../../../ProgramData/Anaconda3/include
DEPENDPATH += $$PWD/../../../../ProgramData/Anaconda3/include

具体操作是,利用QT_Creator自带的添加库的选项,选项如下:
在这里插入图片描述
在这里插入图片描述

在初始化之前添加python的路径,注意要准确:

Py_SetPythonHome(L"C:\\ProgramData\\Anaconda3");
Py_Initialize();

这样解决了部分问题,这样在编译时候是可以正常运行的。

发布后的新问题

但打包发布后的程序在用户端,由于没有C:\ProgramData\Anaconda3这个路径,还是会显示上面的错误。因此需要不能使用Py_SetPythonHome来确定python的路径。

解决办法

注释掉代码中的Py_SetPythome。在环境变量Path中添加路径,我添加的路径如下
在这里插入图片描述
这样编译就能运行了。那么打包客户端没有装python解释器怎么办。
下面介绍具体解决办法。
将调用的py文件用pyinstaller打包成exe

pyinstaller -F testfile.py

生成的build文件夹下的base_libary.zip压缩文件,解压后放在qt生成的exe路径下。
在这里插入图片描述
将base_libary.zip解压后放入exe就可以了,加上python38.dll库这些大小增加大概5M大小,对于发布程序的大小还是可以接受的。
在这里插入图片描述
至此,所有问题解决完毕。我是一名会写代码的建筑结构工程师,可以关注我的微信视频号structurevspoem

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值