3. 打包python应用程序

我们的helloworld程序写完后,在自己电脑上肯定是可以执行的,但问题是我们写的python程序在发送到一台没有安装python解释器的机器上是不能运行的,甚至还要安装程序中所使用的第三方包,这样极其不方便。但是PC是可以直接运行.exe文件的,因此我们通过将程序打包成.exe进行执行,做到分享即可用。

PS: 如果打包为exe的话,版本尽量选择python3.6+32位版本,因为win64位系统向下兼容32位程序,但是如果不考虑32位系统的话无所谓,直接python64位版本直接打包就可以,只是只能在win64位系统上跑。读者需要自己考虑兼容性,本文不再赘述。

1. 安装pyinstaller

直接使用pip进行安装即可

pip install pyinstaller

安装示例:

3. 打包python应用程序_第1张图片

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

参数说明:

  • -F : 或者--onefile, 表示打包为单个文件,这样在打包时,由于会覆盖先前的打包文件,所以不管我们打包几次,都是最新的。如果想要保留目录结构,则使用-D, 因为如果是比较大的项目,py文件多,推荐 pyinstaller 打包使用 -D,即生成一个文件目录包含可执行文件和相关动态链接库和资源文件等,而不是选择 -F 仅生成一个可执行文件。选用生成目录相比单可执行文件的打包方式,执行速度更快。
  • -w : 表示窗体程序,效果与--noconsole相同,都是不展示console窗口,如果想看console窗口,就加上--console
  • -i : 或者--icon, 是设置exe的显示图标, xxx.ico图标文件可以到网上找ico矢量图在线转换工具处理得到
  • main.py : 是我们的主程序入口文件,根据实际情况来

常用的打包命令:

打包exe:pyinstaller -F setup.py

不带控制台的打包:pyinstaller -F -w setup.py 

打包指定exe图标打包:pyinstaller -F -i xx.ico setup.py

更多参数说明,请使用pyinstaller --help命令进行查看:

3. 打包python应用程序_第2张图片

2.3 多文件打包

多文件的打包命令为:

pyinstaller [主文件] -p [其他文件1] -p [其他文件2] --hidden-import [自建模块1] --hidden-import [自建模块2]

更好的方法是:

  • 执行pyinstaller -F main.py,会生成一个main.spec文件
  • 打开spec文件并做相应的修改,把其他的一些项目文件如pyd,dll 以及另外的py文件,静态资源文件等等,加入到文件中对应的位置
  • 执行 pyinstaller -F main.spec 进行打包

另外如果打包文件很大,想对其瘦身的话,可以使用一些工具来创建虚拟环境,只对我们用到的包进行打包,而不是一股脑全部打包。

具体例子网上比较多,大家可以自行搜索一下。此处就不再赘述了。

3. 测试打包文件

进入程序文件所在目录, 打开终端:

3. 打包python应用程序_第3张图片

 这里我们的主程序是main.py, 先以普通打包命令执行:

pyinstaller -F main.py

可以看到打包完成后,这里多了两个目录,其中dist目录包含我们的可执行文件

3. 打包python应用程序_第4张图片

 3. 打包python应用程序_第5张图片

 双击执行以下看看结果,可以看到除了gui窗口,还有一个额外的控制台,这个控制台可以输出一些程序中的打印输出等信息

3. 打包python应用程序_第6张图片

想要去掉控制台窗口的话,我们只需加上  -w, --windowed, --noconsole 即可,选一个即可, 例如:

pyinstaller -F -w main.py

3. 打包python应用程序_第7张图片

你可能感兴趣的:(python,开发语言,pyqt,程序人生)