1. 程式人生 > >Py程式碼打包成SIS安裝包檔案的方法

Py程式碼打包成SIS安裝包檔案的方法

用Python做S60系統的軟體,免不了要把程式打包釋出出來.這裡介紹兩種有效的方法,一種是在手機上打包,一種是在PC上打包.

第一種方法:手機上打包

其實關於Pys60程式在手機上打包的軟體有好多,我用的是一款叫做"智慧解包"軟體,這款軟體功能比較強大,它不僅可以完成打包,解包,而且還可以自簽名,通用簽名,清除簽名等軟體釋出時常用的操作,簡單可以說是一步到位,十分方便.介面如下圖:

Screenshot0023 Screenshot0024

請選擇工具裡的大蟒來打包,我直接用"打包"選單來打包,老是顯示要我選擇檔案,搞不懂.知道的朋友跟我說一聲.詳細操作過程大家可以在手機上實踐.同時這款軟體也自還了操作說明,其中最重要的算是PKG檔案的修改和配置了,不過整個過程也很簡單,一看就知道如何操作.本來它還可以在打包的同時完成簽名的,不過在我的機子上籤不了,也不知道為什麼,只有自己手動完成簽名,手動籤也只能籤通用的.用自己的證書籤進也會報錯.儘管如此,本人還是推薦用它在手機上打包PyS60的程式.通常我還會用到別一款很出名的手機上簽名軟體"自由簽名",它的功能就比較單一了,操作也更簡單.這裡就不多說了.

第二種方法:PC上打包

pc上打包相對比較麻煩一點.我用的是Pys60SDK自帶的工具"Py2sis",這個工具位於"Epoc32/tools/py2sis"目錄下.這是一個py檔案的程式,執行帶引數這個程式,就可以完成打包.所以關鍵就在於這些引數的設定.

首先,需要了解每一個引數的意義,關於具體每個引數我就不多說了,簡單列一下:

py2sis.py [sisfile] [--uid=0x01234567] [--appname=myapp] [--caps="cap_1 cap_2 ..."] [--presdk20] [--sdk30] [--armv5] [--leavetemp] [--autostart]

其中各引數的意義如下:
src  - Source script or directory
sisfile  - Path of the created SIS file
uid  - Symbian UID for the application
appname  - Name of the application
caps  - A list of capabilities ("NONE", if caps is not given)
presdk20  - Use a format suitable for pre-SDK2.0 phones
sdk30  - Use a format suitable for SDK3.0 phones
leavetemp - Leave temporary files in place
armv5  - Generate armv5 binaries, by default gcce binaries are created. Only in SDK3.0
autostart - Start the application during the device bootstrap (SDK3.0 only)

更多的大家可以參考Py2sis資料夾下的readme檔案.裡面有詳細的說明,還帶有例子,不過都是英文的,所以得仔細的讀懂才行.

其次,在執行打包之前還要設定一個虛擬盤,打包的過程上要用到.可以在命令列介面輸入"subst V: C:/Symbian/9.1/S60_3rd"來設定一個虛擬的V盤代表"C:/Symbian/9.1/S60_3rd"目錄.注意,這裡的"C:/Symbian/9.1/S60_3rd"要根據你的實際情況來.它指的是你的"Epoc32"資料夾所在的路徑.設差了可以用"subst V: /D"來刪除V盤.

通常一條比較完整的在命令列下的打包執行命令就如下:

V:/epoc32/tools/py2sis/py2sis.py V:/epoc32/winscw/c/python/貪吃蛇2.0.py --uid=0x01234567 --appname=LuckSnake --sdk30 --caps="NetworkServices LocalServices ReadUserData WriteUserData Location"  --leavetemp

有時,用上述語句打包會編譯錯誤,提示:

ERROR [Errno 2] No such file or directory: '//Epoc32//release//GCCE//UREL//XXXXX.exe'

說是找不到檔案,其實在它指定的目錄下,那個檔案是存在的.其實,它在你安裝Pys60SDK的碟符的根目錄下也創建出來的名為epoc32的資料夾,把這個資料夾複製到"C:/Symbian/9.1/S60_3rd/Epoc32"中,然後CMD再進入剛才用SDK根目錄虛擬出的V盤,還是來到py2sis的目錄,再呼叫一遍就成功了.至於這裡面的原因,我想可能SDK安裝目錄的問題.說到底PY2SIS的設計對目錄要求比較列,不能隨便更改.

說了這麼多,自己要覺得很麻煩,於是用到網友提供的一個批處理檔案(自己修改了一下,加入了自動設定虛擬盤等)來搞定這麼多的東東:

@echo off
subst V: /D
subst V: C:/Symbian/9.1/S60_3rd
C:/Symbian/9.1/S60_3rd/Epoc32/tools/py2sis/py2sis.py C:/Symbian/9.1/S60_3rd/Epoc32/winscw/c/python/貪吃蛇2.0.py --uid=0x01234567 --appname=LuckSnake --sdk30 --caps="NetworkServices LocalServices ReadUserData WriteUserData Location" --leavetemp
xcopy C:/epoc32 V:/Epoc32/ /E /Y
rd C:/epoc32 /Q /S
V:/epoc32/tools/py2sis/py2sis.py V:/epoc32/winscw/c/python/貪吃蛇2.0.py --uid=0x01234567 --appname=LuckSnake --sdk30 --caps="NetworkServices LocalServices ReadUserData WriteUserData Location"  --leavetemp
pause

它上面的程式碼存為.bat檔案,至於這裡面的一個內容是需要你用自己的路徑和名字來替換,我想,只要仔細研究一下,就知道應該怎麼替換了.然後執行,就可以在你的當前py2sis目錄下得到打好包的sis檔案了.

總之,個人還是比較喜歡用手機上打包的工具,直觀,配置方便快捷.

<完>