我们的helloworld程序写完后,在自己电脑上肯定是可以执行的,但问题是我们写的python程序在发送到一台没有安装python解释器的机器上是不能运行的,甚至还要安装程序中所使用的第三方包,这样极其不方便。但是PC是可以直接运行.exe文件的,因此我们通过将程序打包成.exe进行执行,做到分享即可用。
PS: 如果打包为exe的话,版本尽量选择python3.6+32位版本,因为win64位系统向下兼容32位程序,但是如果不考虑32位系统的话无所谓,直接python64位版本直接打包就可以,只是只能在win64位系统上跑。读者需要自己考虑兼容性,本文不再赘述。
直接使用pip进行安装即可
pip install pyinstaller
安装示例:
2. pyinstaller打包
2.1pyinstaller 打包机制
我们写的python脚本是不能脱离python解释器单独运行的,所以在打包的时候,至少会将python解释器和脚本一起打包,同样,为了打包的exe能正常运行,会把我们所有安装的第三方包一并打包到exe。
即使我们的项目只使用的一个requests包,但是可能我们还安装了其他n个包,但是他不管,因为包和包只有依赖关系的。比如我们只装了一个requests包,但是requests包会顺带装了一些其他依赖的小包,所以为了安全,只能将所有第三方包+python解释器一起打包。
2.2 单文件打包
控制台进入py程序项目所在的目录,执行命令:
pyinstaller -F -w -i xxx.ico main.py
参数说明:
常用的打包命令:
打包exe:pyinstaller -F setup.py
不带控制台的打包:pyinstaller -F -w setup.py
打包指定exe图标打包:pyinstaller -F -i xx.ico setup.py
更多参数说明,请使用pyinstaller --help命令进行查看:
2.3 多文件打包
多文件的打包命令为:
pyinstaller [主文件] -p [其他文件1] -p [其他文件2] --hidden-import [自建模块1] --hidden-import [自建模块2]
更好的方法是:
另外如果打包文件很大,想对其瘦身的话,可以使用一些工具来创建虚拟环境,只对我们用到的包进行打包,而不是一股脑全部打包。
具体例子网上比较多,大家可以自行搜索一下。此处就不再赘述了。
进入程序文件所在目录, 打开终端:
这里我们的主程序是main.py, 先以普通打包命令执行:
pyinstaller -F main.py
可以看到打包完成后,这里多了两个目录,其中dist目录包含我们的可执行文件
双击执行以下看看结果,可以看到除了gui窗口,还有一个额外的控制台,这个控制台可以输出一些程序中的打印输出等信息
想要去掉控制台窗口的话,我们只需加上 -w, --windowed, --noconsole 即可,选一个即可, 例如:
pyinstaller -F -w main.py