1 專案描述
為了減輕妹子工作中處理Excel的辛苦,用python寫了幾個處理xlsx的程式碼,分別完成一些獨立的任務,如根據考勤記錄判斷每天未來、遲到、早退的名單,實現兩個複雜xlsx檔案的單元格對比,等等。但妹子畢竟是文科生,直接提供py程式碼並且要求在命令列中呼叫,還是極度的不友好。所以這次希望能夠完善一下,主要實現三個目標:功能整合、提供GUI、打包成exe。
仍舊使用python,經過一番調研決定使用pyqt開發GUI。
2 安裝
我的本本是mac,一直以來也覺得mac(或者linux)比windows更適合於開發,所以這次的程式碼工作依舊在mac os上進行。
為了使用pyqt,需要在mac上具備這些條件:
- Xcode:如果系統沒有自帶,那就裝一個吧,mac os專屬的IDLE;
- Qt:UI開發工具;
- SIP:將C++和python連線;
- PyQt:將python和qt連線。
2.1 Xcode
這個不用多說了,用過Xcode開發過的人都應該聽說過,沒有的話裝一個即可。
2.2 Qt
到Qt官網上下載安裝即可,如果不清楚使用哪一個,可以考慮我的選擇。
2.3 SIP
下載完畢後解壓並在命令列中進入該目錄,執行以下程式碼。
cd sip-4.16.8/
python configure.py
make
sudo make install複製程式碼
2.4 PyQt4
當然現在pyqt最新的版本應該是5點幾了,不過我的需求應該pyqt4就可以滿足。
下載完畢後解壓並在命令列中進入該目錄,執行一下程式碼。
cd PyQt-mac-gpl-4.11.4/
python configure.py
make
sudo make install複製程式碼
2.5 參考
完成以上四個步驟,便可以在mac os中使用pyqt4了(當然,你還得裝了python),進入python然後試試import PyQt4吧,如果能成功匯入說明一切順利。
其他在mac os上安裝pyqt4的參考資料:
3 開發
我的專案託管於Github,example資料夾裡面包含了一些pyqt4的教程例子,My_dear.py是最終的程式程式碼,整合了考勤檔案處理和Excel表格對比兩個功能。介面看起來大概是這樣(介面求不吐槽,畢竟不是產品,不用在乎設計,功能實現就可以啦!),左邊的列表裡的兩項即對應不同的標籤頁。
pyqt4的教程例子主要來源於這裡。
4 打包
如果只是python程式碼的話,別人的電腦上如果想執行就需要配置同樣的環境,所以最好打包成產品,別人執行起來只需要一個檔案即可。
我使用PyInstaller進行專案打包,在mac os上使用pip即可安裝PyInstaller。
sudo pip install pyinstaller複製程式碼
接下來打包成在mac os上可以直接執行的app格式,第一行命令生成打包中間檔案My_dear.spec,第二行程式碼處理該檔案並完成打包。
pyinstaller --windowed --onefile --clean --noconfirm My_dear.py
pyinstaller --clean --noconfirm --windowed --onefile My_dear.spec複製程式碼
當然也可以打包成pkg或dmg等格式,參考這裡。
可這不是我要的效果,因為這個最終是要給妹子用的,妹子單位上班的地方用的桌上型電腦裝的卻是windows,所以平臺差異的問題這時候浮現了出來,一開始就弄錯了開發平臺,因為mac os上開發的程式是不可能打包成exe的= =。
5 出奇簡單的Windows
所以轉戰到實驗室的windows桌上型電腦上再次開發,卻發現這次windows的開發流程比mac os簡單多了。在windows上,有了python,如果想使用pyqt4,安裝一個軟體就夠了,裡面包含了你需要的一切!
下載地址在這裡,直接根據你的python版本和位數選擇exe即可。
安裝過程中會預設選擇系統python安裝路徑,安裝完畢之後就可以執行My_dear.py檔案了。
至於windows下的打包,同樣可以使用PyInstaller。和mac os不同的是,mac os中PyInstaller是python的一個包且可通過pip下載,而在windows中則需要人工下載原始碼。
下載連結在這裡,下載完畢後解壓即可。在cmd中進入該目錄,使用以下命令即可完成打包(為了方便可以把My_dear.py也拷貝至該目錄下)。
python pyinstaller.py [opts] My_dear.py複製程式碼
其中opts為可選引數,主要包括:
- -F,-onefile:打包成一個exe資料夾;
- -D,-onedir:建立一個目錄,包含exe資料夾,但會依賴很多檔案(預設);
- -c,-console,-nowindowed:使用控制檯,無介面(預設);
- -w,-windowed,-noconsole:使用視窗,無控制檯。
所以對於我的GUI,引數的選擇是-Fw。
6 總結
在本次開發過程中,出於個人習慣選擇了mac os作為開發平臺,後面由於匯出exe的需求在windows上再次做了嘗試。總的來說,接觸並初步熟悉了pyqt4在mac os和windows上的部署和開發,以及用PyInstaller打包py程式的方法,還是收穫良多的。