使用 PyInstaller 为 Python 程序打包

前几天一直在折腾用 py2app 给 Python 程序打包的问题,但是最终还是无疾而终。不知道是不是因为使用了 PyQt5 的关系,打出来的包直接被系统 aborted,Google 爬了很久也没有找到解决方法。因此转向PyInstaller,测试后发现的确能非常快速地打包,可以在别的电脑上无缝运行。

相比 py2appPyInstaller个人认为有以下区别:

  • 在 OS X 上打出的包不是 OS X 标准的 .app包,显示为一个二进制文件(这算是缺点?
  • 不需要 virtualenv,使用方便
  • 打包速度非常快,相对于 py2app 而言

那就开始使用吧。首先安装:

pip install pyinstaller

估计速度会很慢,推荐使用万能中科大的镜像站,速度飞起来。

安装好后就可以直接使用了,不需要 virtualenvcd 到项目的目录,用 pyinstaller 执行 Python 脚本。以我的 DriveIt 漫画下载器为例:

cd ~/Documents/PythonStuff/DriveIt
pyinstaller driveit-gui.py

稍等一会就好了。打出的包是一个文件夹,如果想要单文件双击直接执行,把下面那条命令替换为:

pyinstall --onefile drive-it.gui

这样打出的包就是个单文件了,存放在 dist 目录下。包含了各种依赖,实测的确可以双击直接运行,在别人完全没有配置环境的电脑上也没有问题。

效果:

高级用法还没研究过,以后要是有需要会好好研究的。