使用pipenv虚拟环境与pyinstaller将Tkinter文件打包成exe

存了方便自己以后看。

前言:Tkinter文件运行效果

在本次项目中需要运行的是一个连接好深度学习模型的简易前端界面,在pycharm内运行最终效果大致如下:(后续界面没继续截图)
在这里插入图片描述

一.安装pipenv,配置好虚拟环境

1.安装

首先点击键盘的“win”,输入cmd,进入命令提示符,执行以下安装命令:
pip install pipenvpip3 install pipenv(取决于你的pip版本)

2.配置虚拟环境

pipenv install

如何需要不同的python版本,比如采用python3.9,则使用pipenv install --python 3.9

(其余虚拟环境配置指令可以输入pipenv install -h进行查找)

如果要清空虚拟环境,使用pipenv --rm

3.进入虚拟环境

pipenv shell

从这里开始cmd窗口开头会出现类似(coral-MblHMKL3)的字样,MblHMKL3是随机生成的虚拟环境名称,后续需要进入的话可以根据这个名字来找

4.在虚拟环境安装好代码运行所需要的包及pyinstaller包

pip install pyinstaller

……

如果需要打包的py代码中如果含有Pandas库,请注意:

我们需要额外安装xlrd这个库,否则打包后的exe文件看似正常执行,但Pandas包的读取excel文件等功能不生效
pip install xlrd
而且,如果需要读取的文件是xlsx格式,不是xls格式,xlrd的最新版2.0还不能用,需要卸载掉重装:
pip uninstall xlrd
然后安装老版本:
pip install xlrd==1.2.0

二.输入pyinstaller对应命令进行打包

例如:

pyinstaller -F -w C:\Users\coral\Desktop\大数据模型调用代码\main.py --distpath=C:\Users\coral\Desktop\大数据模型调用代码\result\ -i C:\Users\coral\Desktop\大数据模型调用代码\cloud.ico -n 大气污染预测模型(无控制台版)

其中:
-F为打包成一个单独exe文件,简洁,最后exe运行速度较慢。(对应的是-D,打包出来的会有built和dist文件夹等,运行速度较快。)

-w为去掉黑色的控制台(建议可以先输出一个不去掉控制台的exe,便于调试各种bug,没问题后再输出-w的exe。当你的exe可以正常输出但功能出了问题时,控制台就很有用,例如前文的Pandas缺少xlrd就是控制台给出的debug重要信息)

C:\Users\coral\Desktop\大数据模型调用代码\main.py为你要打包的py文件的路径

–distpath=后面的为输出exe的目标路径

-i C:\Users\coral\Desktop\大数据模型调用代码\cloud.ico为exe图标的ico文件路径(可省略。想要将jpg等生成ico文件,可利用在线制作ico图标 | 在线ico图标转换工具 方便制作favicon.ico - 比特虫 - Bitbug.net这个网站)

三.一些可能出现的问题及解决方法

1.一定要在虚拟环境下打包吗?可不可以直接本机环境打包

可以,但是生成的exe文件会很大,它会把本机python环境中所有包都打包进去,打包速度很慢。

如果直接本机打包,cmd窗口pip install pyinstaller后,直接输入第二步里面的长命令(pyinstaller -F -w C:\Users\coral\Desktop\大数据模型调用代码\main.py --distpath=C:\Users\coral\Desktop\大数据模型调用代码\result\ -i C:\Users\coral\Desktop\大数据模型调用代码\cloud.ico -n 大气污染预测模型(无控制台版))打包即可。

2.pyinstaller打包失败,报错

=============================================================
A RecursionError (maximum recursion depth exceeded) occurred.
For working around please follow these instructions
=============================================================

1. In your program's .spec file add this line near the top::

     import sys ; sys.setrecursionlimit(sys.getrecursionlimit() * 5)

2. Build your program by running PyInstaller with the .spec file as
   argument::

     pyinstaller myprog.spec

3. If this fails, you most probably hit an endless recursion in
   PyInstaller. Please try to track this down has far as possible,
   create a minimal example so we can reproduce and open an issue at
   https://github.com/pyinstaller/pyinstaller/issues following the
   instructions in the issue template. Many thanks.

Explanation: Python's stack-limit is a safety-belt against endless recursion,
eating up memory. PyInstaller imports modules recursively. If the structure
how modules are imported within your program is awkward, this leads to the
nesting being too deep and hitting Python's stack-limit.

With the default recursion limit (1000), the recursion error occurs at about
115 nested imported, with limit 2000 at about 240, with limit 5000 at about
660.

如果出现类似问题说明代码没有问题,只是它默认配置出现的问题,栈溢出了。

解决方法:

打包过一次之后代码文件夹里面会出现*.spec文件,打开该文件,在开头添加:

import sys
sys.setrecursionlimit(2000)

即可。这里的2000不是固定的,改成多少都行(改大比较好,还是报错就改更大)。

在修改.spec文件前执行的是py文件,当修改过spec文件后为了使原程序知道你有修改过什么东西,得使用.spec来运行。

pyinstaller -D *.spec

完成打包后生成两个文件目录build和dist

  • build为临时文件目录完成打包后可以删除。
  • dist中存放打包的结果,可执行文件和其它程序运行的关联文件都在这个目录dist下。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值