第一步: pro添加库文件
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/./pythonEnv -lpython311
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/./pythonEnv -lpython311d
INCLUDEPATH += $$PWD/./pythonEnv/include
第二步: 准备python环境
编写好python脚本并确保代码可以跑通后(注: 最好pychar打开检查一遍,有缩进错误的话一目了然,否则光靠文本编辑软件是看不出来的,并且缩进存在问题时调用脚本无任何报错,不出结果),使用pyinstaller 打包脚本(个人建议用虚拟环境打包,需要的话看第二步末尾),得到如下图文件,该目录是我改过名称的,为了对应pro文件的路径目录名
打开python目录,复制一下圈起来的目录到QT打包准备的目录中,目录命名随意,libs目录只要圈起来的两个文件就行了,python311d.lib 是 python311.lib 文件复制后改名加了个d的,也是为了对应pro文件的配置
此时pythonEnv目录的文件是这样的,
虚拟环境:
pip install virtualenv
virtualenv -m 自定义的虚拟环境目录名
cmd 命令 cd 进入前面自定义的目录->script目录 执行 start activate.bat 命令进入虚拟环境
安装库、打包这些就不说了,虚拟环境可以挑脚本需要的库安装,比较纯净,生成的文件比较精简些
第三步: 指定脚本目录,如下图,设置脚本目录,圈起来的是重要的代码,scriptFolder 即
G:\build-SimpleTool-Desktop_Qt_5_12_12_MinGW_64_bit-Release\release 路径,把 release 可行性文件、python环境目录和脚本搬到QT打包准备的目录之后,scriptFolder的路径也就是当前目录路径,因为可执行文件在这,除非特殊需要动态设置脚本目录之外,按下图这么写就好了,脚本在该目录下任何位置都可以找得到
注意注意注意: pythonhome 的设置路径除了python原解释器路径,其他路径一加进去运行脚本直接闪退,这个方法不需要指定pythonhome,就不需要加了
第四步: 打包
把 G:\build-SimpleTool-Desktop_Qt_5_12_12_MinGW_64_bit-Release\release 路径下的exe程序可执行文件、py脚本 和 pythonEnv 环境放同一个目录里面
执行cmd命令 windeployqt SimpleTool.exe 这里我的windeployqt已经加了环境变量了
然后运行可执行文件,可以看到,运行成功了,添加文件的代码里面我调用了脚本的
如果需要打包为单个可执行文件,比较简单,图我都放上来吧,打开 Enigma Virtual Box Software Protection, Software Licensing, Software Virtualization (enigmaprotector.com)https://enigmaprotector.com/en/downloads.html
(一)
(二)
(三) 勾上
(四)检查递归文件夹,看看是否有多余的文件,有就移除掉,比如可执行文件,添加主程序的时候已经包含了,所以移除掉
(五)封包
测试ok,没什么问题,__pycache__文件夹生成说明py代码已经跑了,上图大小一百多兆是因为我没勾上压缩选项~,勾选压缩选项后如下图
压缩后大小43兆
相比较于未压缩前的100M,挺可观了, 另外如果程序在另一个程序上报错找不到QtCore.dll之乐的,把QT目录下 5.12.12\mingw73_64\bin 的三个文件 libgcc_s_seh-1.dll、libstdc++-6.dll、libwinpthread-1.dll 放到打包目录下再试试看,打包成单个可执行文件的话把这三个文件也包含进来
还有一种方法也有效,也是目前资料最多的一种,把整个python搬过来,pro文件指定python目录,代码指定pythonhome
pythonhome指向python文件夹目录,pro文件里include和libs路径在python文件夹里,指定就行了
但是这个方法要带着几百兆的python目录