近日用python寫了一個指令碼為mm-bukepa.org轉換論壇資料,需要在指令碼裡面寫些中文,發現不支援,只能用
print '/xd7/xaa/xbb/xbb/xb3/xcc/xd0/xf2'的方式輸出中文,也停麻煩的,網上一查,發現瞭解決方法,
#!/usr/bin/env python# coding=cp936 #加上這句就能直接輸出中文了###print '轉換程式'
指令碼寫好後,用py2exe,發現又不支援中文了,出現錯誤提示
self.patch_python_dll_winver(dst)
File "C:/Python25/Lib/site-packages/py2exe/build_exe.py", line 918, in patch_p ython_dll_winver add_resource(unicode(dll_name), data, RT_STRING, id, delete)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xbd in position 19: ordinal not in range(128)
再google,發現解決辦法,在C:/Python25/Lib/site-packages目錄下建立sitecustomize.py檔案,檔案內容為:
#!/usr/bin/env python# coding=cp936 import syssys.setdefaultencoding('gb2312')
再運行py2exe,解決問題,可以正常打包。用py2exe打包成一個執行檔案的方法是:
1、建立自己的指令檔 fix.py
2、建立allinone.py打包檔案,讓其與fix.py放置在同一個目錄。allinone.py的內容為:
from distutils.core import setupimport py2exeincludes = ["encodings", "encodings.*"]options = {"py2exe": { "compressed": 1, "optimize": 2, "includes": includes, "bundle_files": 1 } }setup( version = "3.0.0", description = "Data Convert Tools(For MM-Bukepa.org only)", name = "Data Convert Tools", options = options, zipfile=None, console = ["fix.py"], )
3、運行python allinone.py py2exe,在dist目錄將產生fix.exe、MSVCR71.dll和w9xpopen.exe三個檔案,MSVCR71.dll大部分機器都有,我的指令碼不在98下運行,那就不要w9xpopen.exe,只剩下fix.exe檔案。
4、壓縮程式。程式體積有點大,2M多,用upx壓縮一下,執行命令upx -9 -f "fix.exe"
5、產生1.44M的fix.exe,搞定,別的機器運行fix.exe就不用安裝python了。