.. include:: ../LINKS.rst Py2exe =============================================================================== 小白已经成功地完成了通讯录软件了。可是他的通讯录与通常的软件还有比较大的区别。小白的通讯录需要用户安装Python编程环境,点击Python的源代码文件(.py或者.pyw)运行。这种运行方式,对于Linux/Unix和Mac用户并没有什么问题。因为,Python是这三个操作系统内置的编程环境。可是绝大多数的电脑用户使用的是Windows操作系统,特别是小白的MM也使用Windows。为了让MM可以使用通讯录,小白开始琢磨着怎么生成可执行文件(exe)。 小白“百度一下,知道”,Python提供了多种制作可执行文件的方法。在一篇“python转换为exe工具汇总”的网文中提到了许多办法,如py2exe,pyinstaller,PyPackage, Installer,Squeeze,cx_Freeze,py2app和Movable Python等。小白用百度搜索“python exe”时发现,在这么方法中,py2exe提到的次数是最多的,这应该是大伙儿比较喜欢的方式吧。于是,小白决定,尝试用py2exe为他的通讯录制作可执行文件。 Py2exe简介 ----------------------- 小白搜索了一下"py2exe",以大致地了解py2exe的特点和使用方法。在浏览几个贴子后,小白对py2exe有了更多的了解。 原来,py2exe只适用于winddows操作系统,可以将python代码转化为可以独立执行的文件(exe)的工具。生成exe文件后,用户就不需要在windows操作系统上安装python编程环境了。Py2exe可以成功地打包Python的很多库,如wxPython,Tkinter,PySide, PyQt,PyGTK,pygame,win32com.Py2exe 的官方网站上还提供了一个邮件列表(py2exe-users@lists.sourceforge.net),有很多程序员订阅了这个列表,可以在上面求助关于py2exe的打包问题。 "恩!这应该是我需要的功能。" 小白决定,动手用py2exe制作exe文件。 安装py2exe ----------------------- 小白用必应(Bing.com)搜索了“py2exe download”,直接找到了py2exe的官方主页,http://www.py2exe.org/。 Py2exe的官方主页中提供了一个邮件列表 ,常见问题(FAQ),教程(Tutorial),和下载连接(Download py2exe from SourceForge)。 小白点击下载连接,找到了存放在SourceForge上的安装文件, http://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/ 小白使用的是Python 2.5, 于是他下载了py2exe-0.6.9.win32-py2.5.exe。下载完成后,小白一路点击下一步,完成了py2exe的安装。 Py2exe的用法 ----------------------- 小白仔细地读了Py2exe官方网站上的教程(http://www.py2exe.org/index.cgi/Tutorial),发现用py2exe打包并不太难,只需要写一个setup.py文件用以配置打包方案,然后运行python setup.py py2exe就可以了。 小白从Py2exe官方网站的教程中下载了setup.py,将教程中的hello.py换成了QtAddressbookzh.py,用于打包他用PyQt写的通讯录。小白修改后的setup.py如下: .. literalinclude:: ../../src/3_guimala/qt/setup0.py 小白把setup.py放在了PyQt通讯录源代码的文件夹里。然后,在命令行中运行python setup.py py2exe,打包。 打包完成后,小白发现,新生成了两个文件夹:build和dist。dist文件夹里放着打包后的可执行文件QtAddressbookzh.exe。 小白欣喜地点击QtAddressbookzh.exe运行,却再一次失望。打包失败啦!通讯录不能运行,并生成了下面的错误信息。 :: Traceback (most recent call last): File "QtAddressbookzh.py", line 13, in File "PyQt4\QtCore.pyc", line 12, in File "PyQt4\QtCore.pyc", line 10, in __load ImportError: No module named sip 小白搜索了错误提示“ImportError: No module named sip”,发现错误原因是py2exe没有找到sip这个模块,只需要通过:: options={"py2exe":{"includes":["sip"]}} 指定要用到sip模块就可以了。下面是小白最终使用的setup.py。小白把setup.py放在了 `qt/setup.py` 处,您也看看吧。 .. literalinclude:: ../../src/3_guimala/qt/setup.py 最后,小白在命令行中运行python setup.py py2exe,成功地将基于PyQt的通讯录打包成可执行文件了。 小白还没有来得及为他的基于tkinter和wxpython的通讯录打包。他想请读者朋友帮他打包一下。好不?