1. 问题描述

在日常工作中经常使用Python的小伙伴会经常需要把py文件打包成exe文件给别人使用,这样的好处就是别人不需要安装所需要的python环境和所依赖的库即可运行你的程序。我们通常使用pyinstaller工具来打包成exe可执行文件:

pyinstaller -F yourFile.py

但是这样打包成的exe非常大,动辄几百M,然后打开之后启动非常慢,30s以上才有反应。这种肯定不利于日常使用,那么造成这个现象的原因是什么?有没有什么方法可以解决这个问题呢?

2. 产生原因

造成这个问题的原因在于pyinstaller在打包py文件的时候,并不会智能地把你文件中需要的库打包进去,而是偷懒把当前环境中所有已经安装的库都给你打包进去了,所以我们最后得到的exe文件才会很大,从而导致启动很慢。

2. 解决方法

解决方法很简答,我们需要在一个新的虚拟环境中打包就好了。以anaconda为例,它需要三个步骤:1.建立虚拟环境,2.安装py文件所依赖的库,3.利用pyinstaller打包。

2.1 建立虚拟环境

使用的anaconda建立虚拟环境的指令:

conda create -n yourEnvName python=3.6.5

其中yourEnvName 是虚拟环境的名字,python的版本根据号自己的序号来选择。
建立完环境之后进行激活即可:

activate yourEnvName 
2.2 安装所需库

进入到我们建立的环境之后,安装我们所需要的库即可,当然,pyinstaller也是需要安装的:

pip install pyinstaller
2.3 在环境中打包

安装完我们工程所需要的库之后,就可以在虚拟环境中打包了:

pyinstaller -F yourPyFile.py

打包之后我们发现,生成的exe文件的大小变为了几十M(虽然也很大),启动时间缩短为了小于10s(虽然也不短),但比之前的结果好多了。

2.4 附pyinstaller参数表

对于pyinstaller工具,其选项参数列表如下所示:

选项描述
-F生成结果是一个exe程序,所有的第三方依赖库和其他资源都被打包成进该exe程序中
-D生成结果是一个包含exe程序的目录,所有第三方依赖库和其他资源和exe程序位于同一目录下
-i为生成的程序指定一个icon图标
-c显示命令行窗口
-w不显示命令行窗口
-n指定生成的exe和spec文件名
-distpath指定打包后的程序存放目录,默认存放在当前目录下的dist目录
-workpath为输出的所有临时文件指定存放目录
-h显示帮助信息
-v显示版本号
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐