將python3.1+pyqt4打包成exe

將python打包成exe的程序有很多,比如py2exe、PyInstaller等等,但是到目前爲止,它們對python3.1支持的都不好,所以這裏我要介紹一下cx_freeze 4.2.2,它還能支持跨平臺,可以在windows和linux運行。
cx_freeze的下載網址爲 http://sourceforge.net/projects/cx-freeze/files/ ,要根據已安裝的python版本進行選擇。比如我使用的是python3.1,所以就要下載cx_Freeze-4.2.2.win32-py3.1.msi這個文件。運行這個安裝包後,相關程序就會被拷貝到python的目錄下。主要在兩個地方,一個是C:/Python31/Scripts,另一個是C:/Python31/Lib/site-packages/cx_Freeze
 
在以前版本的cx_Freeze中,是通過FreezePython.py這個腳本將py轉換爲exe,而在4.2.2這個版本中,FreezePython.py已經不見了,主要的工作交給了C:/Python31/Scripts下的cxfreeze.bat來完成。
使用cx_Freeze完成python打包exe主要有兩種方法:
第一種,直接運行cxfreeze.bat通過:
先進入cmd命令行,進入C:/Python31/Scripts目錄,然後運行cxfreeze.bat -h 就可以看到它的使用說明了。我們可以用cx_freeze自己的sample做個試驗。
進入到c:/python31/scripts/下,運行
cxfreeze C:/Python31/Lib/site-packages/cx_Freeze/samples/PyQt4/PyQt4app.py --install-dir=d:/123
pytqt4app.py就會被打包成exe,並且它所用到的庫文件,也被一併考到了d:/123目錄下。
 
第二種,方法,運行setup.py:
在cxfreeze附帶的例子 C:/Python31/Lib/site-packages/cx_Freeze/samples/PyQt4 中,有一個setup.py文件,打開這個文件,我們發現其內容爲:
  1. import sys  
  2. from cx_Freeze import setup, Executable  
  3. base = None  
  4. if sys.platform == "win32":  
  5.     base = "Win32GUI"  
  6. setup(  
  7.         name = "simple_PyQt4",  
  8.         version = "0.1",  
  9.         description = "Sample cx_Freeze PyQt4 script",  
  10.         executables = [Executable("PyQt4app.py", base = base)]) #PyQt4app.py即爲要打包的文件  
通過運行這個腳本,就可以自動的完成打包工作:
比如,我們進入 C:/Python31/Lib/site-packages/cx_Freeze/samples/PyQt4目錄下,
運行
setup.py build
之後,在此目錄下會出現一個build/exe.win32-3.1目錄,該目錄下即可看到打包完成的exe文件了。我們要想對自己的腳本打包,將這個setup.py 拷貝過去,再將其中
executables = [Executable("PyQt4app.py", base = base)])
的PyQt4app.py改爲自己的腳本名即可。
 
打包過程中出現的問題:
對中文支持的問題,如果腳本中存在中文,且編碼格式沒有特別指出,打包的過程中會出現: UnicodeDecodeError: 'utf8′ codec can't decode bytes in position 1602: invalid data 這類的錯誤,在http://www.cnblogs.com/xinzaitian/archive/2010/12/10/1902481.html這篇博文中,作者提到必須將中文刪除掉。
其實中文字符可以保留,只要在腳本文件的行首加上:
#!/usr/bin/env python
#coding=utf-8
就可以了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章