用Pyinstaller打包Python脚本

我们开发的脚本一般都会用到一些第三方包,可能别人也需要用到我们的脚本,如果我 们将我们的xx.py文件发给他,他是不能直接用的,他还需要安装python解释器,甚至还要安装我们用的那些第三方包,是不是有点小麻烦?
但是我们都知道,PC是可以直接运行exe文件的,这就为我们提供了一个便捷的方式。所以,从看了这个教程以后,这都将成为过去式,打成exe之后,分享即可用。

一、准备工作

1、安装Pyinstaller

  • 首先打开命令行窗口
  • 输入pip install pyinstaller,回车
  • 如下图所示:用Pyinstaller打包Python脚本
  • 由于我已经事先安装好了,所以下面显示already等字样,第一次安装的话可能要等一会
  • 下载的默认源是在国外,觉得速度慢的话可以使用清华镜像源,输入 :
  • pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple some-package即可
  • 等到出现successful等字样就已经安装好啦

2、准备图标

  • 众所周知,每个应用程序都有自己的图标,使用pyinstaller打包的exe也是有图标的,不过它的默认图标比较大众,为了使我们的exe更加美观,我们可以自己准备一个图标
  • 这里推荐两个网址,我们可以选择合适的图片:
  • 阿里矢量图标库
  • 图标下载
  • 有了图片还不够,用作图标的图片格式必须是.ico格式
  • 这里再推荐一个图片转换器

用Pyinstaller打包Python脚本

  • 注意根据不同系统选择相应的格式
  • 这样我们的图标就制作完成啦

二、打包

1、打包机制

  • python脚本是不能脱离python解释器单独运行的,所以在打包的时候,至少会将python解释器和脚本一起打包,同样,为了打包的exe能正常运行,会把我们所有安装的第三方包一并打包到exe。

2、开始打包

1.pyinstaller + 脚本名.py

  • 这里呢,我拿刚写的一个自动化脚本autologin.py举个栗子
  • 我这里直接在PycharmTerminal里头操作,不用pycharm的可以直接用命令行窗口
  • 首先,cd到需要打包的脚本目录下(这个很关键,或者直接在目录下打开cmd,方法很多)
  • 切换到脚本目录下后,再敲入pyinstaller autologin.py,下面就开始自动分析,在该目录下产生一系列exe运行所依赖的文件:
    用Pyinstaller打包Python脚本
    箭头指向的便是我们的exe,最好在dist目录下面找,有些脚本分析时,在build目录下面没有exe文件
    用Pyinstaller打包Python脚本
  • 这种方法打包后携带了大量的库文件,一个单独的exe文件依然无法使用,所以这种方法我们不建议使用

2.pyinstaller -F + 脚本名.py

  • 在命令行窗口敲入pyinstaller -F autologin.py
  • 待分析完成,我们可以在dist目录下看到一个单独的exe文件
    用Pyinstaller打包Python脚本
  • 默认的图标
    用Pyinstaller打包Python脚本
  • 这样,我们就完成了一个打包工作,如果别人需要,即使没有python环境,他依然可以运行。

3.pyinstaller -F -i 图标名.ico + 脚本名.py

  • 这里我们用上之前准备好的图标,将.ico格式的图片放到该脚本目录下

  • 同样,我在命令行敲入pyinstaller -F -i icon.ico autologin.py 用Pyinstaller打包Python脚本

  • 打包过程中我发现一个奇怪的现象,原本英文名autologin无法显示我自定义的图标,可是拖到桌面上就可以显示出来,在原目录下改成中文名也能显示出来

  • 不过要注意的事,打包时所用到的路径千万不能有中文名,不然可能会出现意想不到的bug

  • 效果:

  • 用Pyinstaller打包Python脚本用Pyinstaller打包Python脚本

三、总结

  • pyinstaller xx.py :会产生大量脚本依赖的库文件,了解,不建议使用
  • pyinstaller -F setup.py 打包出独立的exe
  • pyinstaller -F -i xx.ico xx.py 打包出独立exe且自定义图标
  • pyinstaller -F -w xx.py 不带控制台的打包,即运行exe后不显示cmd那样的黑窗口,了解即可

很早就想通过写博客的方式来记录一段时间的收获,却迟迟没有动手,这次算是一个简单的尝试。
有些事,你不去做,永远不知道会发生什么,万一。。。
扇脸
~~