Pyinstaller打包exe文件

1. 写在前面的话

帮同事用Python写了个小工具,读入xlsx文件,根据xlsx中的数据输出图片,用tkinter做的GUI,代码参考了【作者:清风Python】的一篇文章1

但是在整个过程中遇到了很多问题,在这里做一个汇总整理。

结合其他博客整理的小Tips2

  1. 在代码里面尽量不要用import,能from…import…就尽量用这个,因为如果是import的话,在打包的时候,会将整个包都打包到exe里面,增大工具的大小。
  1. 我的图标是用在线转换工具转的,可以将自己想要的图片做成ico,如果想用一些标准制作的图标,可以试一下这个图标网站

2. 我用到的Pyinstaller参数介绍

因为网上很多地方可以查到所有参数,我这里只列出了我用到过的,我也较熟悉,以作记录。我在打包的过程中运行的代码格式基本如下:

pyinstaller -F -w -i icofilec.ico pythonfilename.py
参数参数介绍
-F, --onefile打包一个单个文件,如果你的代码都写在一个.py文件的话,可以用这个,如果是多个.py文件就别用
-D, --onedir打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码
-w,–windowed,–noconsole加上这个参数程序运行时不显示 控制台窗口(黑黑的那个窗口),不加上则显示。(只对Windows有效)
-i, --icon将file.ico添加为可执行文件的资源(只对Windows系统有效),改变程序的图标 pyinstaller -i ico路径 xxxxx.py
# 如果已经使用了-F参数,可以再运行下面的代码查看
pyinstaller -D pythonfilename.py

3. 我用过的环境

3.1 Anaconda的Environments

【首先成功运行的环境,后来还是用了Pycharm的venv】
为了测试,Create了一个新的Environments,在新环境中安装了一个Spyder,在Spyder中运行了py文件,根据报错信息,挨个安装运行py文件需要的库。
等到py文件可以整个运行成功之后,在Anaconda Prompt中打包,dist文件中出来的exe大概 252M,已经比base环境中小了很多,但是当我复制到另外一个电脑上时,程序只能运行到一半,只创建了一个文件夹,并没有输出图片,就自动关闭了,在运行成功的电脑上,弹出的窗口是不会自动关闭的。
然后抱着尝试的心态在同事们的电脑上都做了测试,2个可以运行,5个不能运行,后来发现应该是因为文件太大了。

之后用Pycharm的venv创建成功的exe只用 60M,实测都可以运行了。

3.2 Pycharm的venv

在查找资料的过程中,有文章提到可以用单独项目的venv来打包exe,因为pyinstaller会把它所在环境的所有库都打包进来,刚开始没有理解,后来发现用Anaconda的base环境打包出来的exe要 1个G …… 我就动心思了,但是因为我之前没有用过Pycharm,结果这条路走的并不顺畅,创建出来的可执行文件确实变小了很多,大概7MB左右,但是并不能用[捂脸]🤦‍不过为了给可执行文件减重,之后一定要找机会再试试!所以第一次测试成功还是用的Anaconda中的环境。

啊啊啊!!!
我成功啦!!!
在Anaconda中解决了4.1的问题后,同步应用到了Pycharm中,最终生成了一个只有60M的工具,敲开心♥♥♥~~~

简单说一下操作步骤吧:

  1. 在Pycharm中创建新项目,使用新的环境。选择Python Interpreter: New Virtualenv environment,这里需要选择项目所在的文件夹,以及python.exe所在的文件夹,不然没法用。(像我一样找不到原来的可以重新安装一个python官方网站
    New Virtualenv environmnet
  2. 安装程序运行的依赖库,有两种方式:
    2.1 在Setting中直接查找添加
    Setting
    2.2 在界面下方Terminal中通过pip命令安装(不要忘了安装pyinstaller)
    Pycharm - Terminal
  3. 还是在界面下方的Terminal中,通过pyinstaller的命令打包程序
    3.1 成功后,在运行该命令的文件夹下就会出现两个新的文件夹:distbuild,一个新文件pythonfilename.spec.
    3.2 exe就在dist文件夹中

4. exe运行问题

4.1 Failed to execute script…

查看了很多网页,都没有起作用,后来偶然我想着就随便创建一下,没有使用-w,在运行exe的时候闪过了报错信息,用视频录了下来,发现了一个RuntimeError: Could not find the matplotlib data files
could not find the matplotlib data files
搜索了这个报错信息后,发现了一篇文章3跟我遇到的问题一样,参考了他的方法(降低了Matplotlib的版本),具体操作在Anaconda Prompt中:

# 先查看了一下自己matplotlib的版本
(your env) C:\user\user>pip list
(your env) C:\user\user>pip uninstall matplotlib
(your env) C:\user\user>pip install matplotlib==3.1.1
(your env) C:\user\user>pyinstaller -F pythonfilename.py

再运行exe,命令行窗口有warning信息,但是能够正常弹出我的exe界面了。这个warning不知道以后会不会有影响,反正现在的问题是解决了。

……\PyInstaller\loader\pyimod03_importers.py:623: MatplotlibDeprecationWarning:
The MATPLOTLIBDATA environment variable was deprecated in Matplotlib 3.1 and will be removed in 3.3.

  1. 帮小姐姐写个爬虫,赢得她请我喝下午茶,Nice啊! ↩︎

  2. pyinstaller参数介绍以及总结 ↩︎

  3. 打包matplotlib出现RuntimeError: Could not find the matplotlib data files ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值