如果只是开发给自己用,直接执行源码倒也没有什么问题,不过很多时候我们需要给非开发人员提供一个可执行的程序,显然让他们通过命令行运行程序是不太合理、不够友好,即使能够将就,部署环境也是够呛,特别是使用了较多的第三方库的情况下,不同的环境会遇到各种揪心的问题。这时我们需要把Python程序打包成一个独立的程序,发送给有目标用户,目标用户只需要双击文件即可执行程序,即使这个程序只是个命令行程序,这也比让用户自行部署环境、安装第三方库、在命令行运行入口程序来的友好得多。

将 Python 程序打包成 exe,有三种方案:cx_freeze,py2exe,pyinstaller。最初使用过cx_freeze,老实说,体验并不好。py2exe没有使用过,这次打包程序使用的是pyinstaller。

pyinstaller 支持跨平台,不过只支持在打包的平台上运行,也就是它不支持在mac上打包exe,只能在Windows上打包exe。pyinstaller 会将第三方库一起打包,因此只需要在打包的设备上配置好相关环境,生成的exe文件可以运行在未安装Python的设备上。

安装

官方有安装方法,Windows平台需要先安装pywin32,进入最新的编译版本,选择相应的版本下载安装即可。

然后从这里下载 pyinstaller 的最新 release 版本,下载完成后进入子目录执行安装命令:

python setup.py install

打包

pyinstaller -F your_application_entry.py

该命令会在当前目录生成一个 build 目录和 dist 目录,生成的程序就在 dist 目录下。

pyinstaller 的常用参数说明:

-F,–onefile: 打包成一个可执行文件,不加该参数会生成一个目录,除可执行程序外还包含编译好的Python文件和运行时需要的dll文件。
-w, –windowed, –noconsole 不生成控制台,如果有图形界面的话,可以加上,这里我们需要控制显示日志,因此不加。

更多参数见手册

补充:

Mac 下的 Python3 打包如果出现下面的问题:

Python library not found: libpython3.5.dylib

Python library not found: .Python, Python, libpython3.5.dylib

就需要使用--enable-framework选项重新安装 Python3,这里用到了pyenv工具:

env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.5.2

关于pyenv的使用,见前面的开发环境介绍篇。

总结

至此,我们已经具备了使用 Python 开发一个爬虫的工具和相关知识,最后再提一下,如果基础知识不清楚的可以查看廖雪峰大神的Python 教程,开发过程中需要深入了解系统API可以查看官方文档