最近用python开发了一个基于smartQQ的多QQ登录工具,需要打包发布。折腾了一天总算是用pyinstall搞好了。官方的教程说的很详细,这里主要说一说会遇到的坑。 主要步骤其实就是三步
- 生成spec文件
- 修改spec配置
- 打包
以下是具体的说明:
- pyinstaller的安装 pip install pyinstaller就行了,但是在windows下是需要安装pywin32的。此外,还需要编译器mingw或者是visual studio都行。
- 源代码的结构 单文件或者多文件都行,pyinstaller的做法是不管你有什么在里面全部都给你放进去,说明在这里。
- spec文件 直接用cmd切换目录到源代码的根目录下,运行一下pyi-makespec [主文件].py。注意这里的主文件指的是程序的入口,如果你是pyqt的程序一般都有一个启动主要界面的源文件。运行这个命令能够在当前文件下生成[主文件].spec文件。
- 修改spec文件 这个spec文件可以控制程序发布的内容,这里提一下一些常用的。 第一个是库依赖的问题,直接使用pyi-makespec生成的spec文件能够成功打包,但是会提示six找不到,以下是手动修改hiddenimports选项。
hiddenimports=['six','packaging', 'packaging.version', 'packaging.specifiers'],
第二个是icon的指定,这里需要说明一下。程序icon的显示其实出现在两个地方一个是程序界面的左上角那里,还有一个是程序在任务栏里面显示的图标。前者是在pyqt源代码里面指定的,而后者需要自己在exe = EXE()里面指定,新增加一个icon字段,指向ico的路径就行。 第三个是文件的收集,为了使pyinstaller收集当前目录下的全部文件需要指定收集的路径,方法是在Collect中的exe参数后面增加一个参数Tree("源代码根目录")。
coll = COLLECT(exe, Tree("path/to/source"),
a.binaries,
....
)
第四个是终端的启动问题,默认的spec会使程序在运行的时候打开一个终端,这个可以在EXE里面将console设置为0就可以了。 5. 打包pyqt程序 pyinstaller [main].spec 写了这么多,其实是想给大家安利一下pyinstaller,打包起来很简单,赶紧试试吧。