PyQt5小技巧整理1:Python項目輕打包成可執(zhí)行文件

獲取更多文章和更新,請關(guān)注我的個人主頁:www.leiting6.cn

常用打包工具

關(guān)于Python項目打包成可執(zhí)行文件發(fā)布出來已經(jīng)不是新鮮話題了遂庄,目前應(yīng)用比較多的場景是在Windows和Mac環(huán)境下。大家比較常用的打包工具如下格仲。

1. pye2exe for Windows

停更與2014年忍啤,目前只支持py2.x和py3.0-3.4;之前我自己編寫的幾個PyQt5工具一直用py2exe打包的蛉抓,體積相對比較小,但是這幾次打包總是遇到各種各樣的錯誤剃诅,而且應(yīng)用到的某些第三方庫已經(jīng)要求py3.5+的Python環(huán)境了巷送,無奈只能拋棄。

2. pyinstaller for Windows and Mac

一直在更新矛辕,支持py2.7和py3.4-3.7笑跛,功能強大,Windows和Mac平臺都可以使用聊品。

3. py2app for Mac

Mac環(huán)境下使用較多的打包工具飞蹂,功能比較齊全,可以通過setup.py來對打包操作進行配置翻屈。

所謂“完整打包”和“輕打包”

完整打包

介紹

完整打包即把Python腳本主體打包成當前操作系統(tǒng)環(huán)境下的可執(zhí)行文件并附帶上所需要的第三方庫陈哑,一般包含各種動態(tài)鏈接庫和其他組件。比如下面截圖是我去年用PyQt5編寫的一個adb工具伸眶,除了PyQt5庫外惊窖,還使用了configparer庫(一個用于讀寫ini配置文件的第三方庫),以及幾個Python自帶的組件赚抡。這個小工具其實功能并不復(fù)雜爬坑,只是需要PyQt5來完成GUI繪制,但體積卻有50+M涂臣。文件夾里面選中的部分為和PyQt5直接相關(guān)的組件盾计,其大小總和已經(jīng)達到20+M售担。這就是Python項目完整打包的弊端:體積過大。有興趣的朋友可以試驗一下署辉,創(chuàng)建一個py腳本族铆,只寫兩三句特別簡單的語句,甚至不import任何模塊哭尝,然后用上述幾種打包軟件打包成exe或者app看看成品的體積大小如何哥攘。


image.png

弊端

  • 打包后體積大,比較占用空間材鹦,不方便傳輸
  • 每次源碼更新都需要重新打包逝淹,相對來說更新軟件也動作也會比較大

優(yōu)勢

  • 包含所有需要的組件,不依賴Python環(huán)境桶唐,不依賴第三方模塊栅葡,拷貝到其他機器上可以直接運行使用

輕打包

介紹

輕打包說白了,就是創(chuàng)建一個啟動入口尤泽,一鍵啟動Python腳本欣簇,當然,如果你愿意坯约,可以放一個快捷方式在桌面熊咽,不過在Windows上,py腳本文件不處理的話打開會有cmd窗口闹丐,而且不能固定到任務(wù)欄或者開始菜單横殴;在Mac上,不能指定圖標妇智,而且也不好放在LaunchPad里滥玷。所以還是生成一個exe或者app更好,嗯巍棱,反正我是信了!很明顯蛋欣,這得要求腳本源文件保持在磁盤的某個位置不能隨意移動航徙,而且Python環(huán)境和依賴也是必須安裝的。

弊端

  • 操作系統(tǒng)必須安裝完整的Python壞境
  • 使用某個程序得安裝這個程序所必須的第三方庫
  • 腳本源文件必須放在磁盤中陷虎,不能隨意移動
  • 隨著項目更新到踏,可能得隨之更新Python版本和第三方庫的版本以及安裝新的依賴庫
  • 項目開發(fā)者有必要告知用戶需要安裝的Python版本和以及庫版本

優(yōu)勢

  • 如果項目更新不涉及Python環(huán)境和第三方庫的改動,可以只更新腳本文件尚猿,而不用重新打包
  • 啟動程序輕量級窝稿,而且用戶自行打包也十分容易操作
  • 軟件內(nèi)檢查更新功能編寫簡單,只需要更新有更改過的腳本文件即可(如果沒有其他組件需要更新的情況下)

開發(fā)建議

完整打包和輕打包都是有可取之處的凿掂,但如果項目開發(fā)初版就基本定型伴榔,后續(xù)不會涉及重大改變纹蝴,只是修補腳本的邏輯和在之前的基礎(chǔ)上增刪改功能,可能我還是更推薦輕打包踪少,畢竟如上面所說塘安,打包之后軟件更新也十分簡單,只需要單獨編寫一個update.py援奢,更新有改動的腳本文件即可兼犯。
對于開發(fā)者而言呢,我覺得需要注意的部分集漾,是一開始就要對項目做好規(guī)劃切黔,確定使用的環(huán)境和依賴,避免后續(xù)的使用麻煩具篇,而對于像編寫PyQt5之類項目纬霞,我們一定要:
盡量使用PyQt5和Python自帶的功能!T粤险领!
盡量使用PyQt5和Python自帶的功能!C虢簟绢陌!
盡量使用PyQt5和Python自帶的功能!H刍帧脐湾!
因為PyQt5本身涵蓋的功能非常廣,比如我上面提到的處理ini配置文件的功能叙淌,其實PyQt5也是有的秤掌,所以完全可以少安裝一個第三方庫;其他比如系統(tǒng)剪貼板的操作鹰霍、數(shù)據(jù)庫的操作等等闻鉴,PyQt5都是支持的。

輕打包步驟

下面簡要介紹一下Windows下和Mac下對Python項目進行輕打包的步驟茂洒,至于Linux...你都拿Linux當使用環(huán)境了孟岛,也不會來看這個教程了。打包操作以我在github上發(fā)布的七牛云助手項目為例子督勺。

Windows下

1. 安裝Python環(huán)境

這個項目我使用的Python3.6調(diào)試的渠羞,點擊跳轉(zhuǎn)Python官網(wǎng)下載。安裝的時候記得勾上Add PATH智哀,這樣Python的目錄就會加到環(huán)境變量里面去次询。

image.png

不出意外,安裝完成后打開cmd瓷叫,輸入python屯吊,就能看到命令行已經(jīng)進入了Python解釋器送巡。
image.png

輸入pip3,也能看到pip工作正常雌芽,這是Python安裝依賴的工具授艰。
image.png

如果cmd不能識別到python命令和pip3命令,可以再次運行安裝包選擇repair世落,

2. 安裝第三方庫

需要安裝3個第三方庫淮腾,分別是:PyQt5圖形庫,configparser庫和PIL庫和打包用的pyinstaller屉佳。

pip3 install pyqt5
pi3 install configparser
pip3 install pillow
pip3 install pyinstaller

其中PyQt5安裝的時候比較久谷朝,耐心等待。

3. 嘗試運行

下載項目打包文件武花,解壓到任意文件夾圆凰,在命令行中cd到當前目錄,當然也可以在沒選中任何文件的情況下按住shift鼠標右鍵點擊空白處体箕,選擇在此處打開powershell专钉。輸入:python QiniuHelper.py啟動主程序。

image.png

簡單操作一下累铅,沒什么問題的話就說明環(huán)境已經(jīng)搭建完成了跃须。

4. 進行打包

下面騷操作來了(敲黑板),同學們看好娃兽。在項目目錄下新建一個run.py(后續(xù)我會把這個腳本放到項目源碼中去)菇民,里面只需要兩行代碼:

import os
os.system('start pythonw QiniuHelper.py')

接著還是在cmd窗口中,cd到項目目錄投储,執(zhí)行以下命令:

pyinstaller -F -w -i icon.ico run.py

其中:

  • pyinstaller是執(zhí)行打包的命令第练,剛才通過pip安裝的
  • -F表示打包成單個exe文件,不會把組件放到exe外
  • -w表示執(zhí)行時不顯示cmd窗口
  • -i icon.ico 表示使用icon.ico作為圖標
  • run.py表示將要打包的py腳本對象
    不一會玛荞,就會在項目目錄下生產(chǎn)一個build文件夾和dist文件夾娇掏,而dist文件夾下有一個run.exe文件,大小4-5M勋眯,我們把它復(fù)制到項目目錄驹碍,雙擊運行。Duang凡恍!不出意外,程序界面就會成功跳出來了怔球。


    image.png

5. 后續(xù)

后續(xù)我會把run.py和打包操作的bat文件放到項目中去嚼酝,用戶一鍵生成就好。

Mac下

1. 安裝Python環(huán)境

同樣竟坛,從Python官網(wǎng)下載適用于Mac的Python3.6安裝包闽巩。安裝過程比較簡單钧舌,一路繼續(xù)就行了。安裝完成后涎跨,打開Mac的終端工具洼冻,輸入python3pip3都沒有提示命令找不到就說明安裝成功了。之所有python和pip命令后面都需要加個3隅很,是因為Mac OS一般都自帶Python2.7撞牢,在Python3.x環(huán)境下開發(fā)的軟件用Python2.7的解釋器打開肯定是會出問題的。
另外我不推薦新手或者只是為了使用一兩個軟件要用到Python環(huán)境的同學安裝anaconda叔营,這貨集成了諸多第三方包和其他功能屋彪,用不上,體積還大绒尊。

image.png

image.png

2. 安裝第三方庫

同樣需要安裝3個第三方庫畜挥,分別是:PyQt5圖形庫,configparser庫和PIL庫和打包用的py2app婴谱,因為py2app在

pip3 install pyqt5
pi3 install configparser
pip3 install pillow
pip3 install pyinstaller

其中PyQt5安裝的時候比較久蟹但,耐心等待。

3. 嘗試運行

打開Mac的終端谭羔,cd到項目目錄华糖,輸入:

python3 QiniuHelper.py

如果軟件順利打開,則說明可以進行打包操作了口糕。

4. 進行打包

沒有Windows打包時的騷操作缅阳,但是用py2app打開會比pyinstaller打包稍微復(fù)雜一點。
首先景描,是安裝了py2app之后終端可以使用py2applet命令了:

py2applet --make-setup QiniuHelper.py

這一步完成之后會生成一個setup文件十办,然后:

python3 setup.py py2app -A --iconfile icon.icns

其中:

  • py2app:打包用的工具
  • -A:表示打包成一個啟動入口程序,不采用完整打包方式
  • --iconfile icon.icns:為生成的程序指定一個圖標超棺,Mac下必須使用icns格式的圖標文件向族,png/icon格式無法使用
    好了,這是文件夾內(nèi)也會多出一個build文件夾和一個dist文件夾棠绘,dist文件夾內(nèi)有一個QiniuHelper.app件相,這是我們復(fù)制項目文件夾里的icon.png/icon.icns/on.png/off.png,右鍵QiniuHelper.app打開包含內(nèi)容氧苍,把剛才復(fù)制的文件丟到Contents/Resource文件夾中夜矗。這時我們雙擊QiniuHelper.app,就能看到程序界面了让虐。


    image.png

    因為生成的app是可以移動到任何地方的紊撕,所以盡管把它丟到應(yīng)用程序里去吧,這樣就可以在LaunchPad中看到它赡突、并可以固定到Dock欄上了对扶。

5. 后續(xù)

后續(xù)我也會把一鍵生成的腳本放到源碼中区赵,用戶直接點擊腳本一鍵生成就好。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浪南,一起剝皮案震驚了整個濱河市笼才,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌络凿,老刑警劉巖骡送,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異喷众,居然都是意外死亡各谚,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門到千,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昌渤,“玉大人,你說我怎么就攤上這事憔四“蛳ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵了赵,是天一觀的道長潜支。 經(jīng)常有香客問我,道長柿汛,這世上最難降的妖魔是什么冗酿? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮络断,結(jié)果婚禮上裁替,老公的妹妹穿的比我還像新娘。我一直安慰自己貌笨,他們只是感情好弱判,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锥惋,像睡著了一般昌腰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上膀跌,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天遭商,我揣著相機與錄音,去河邊找鬼捅伤。 笑死株婴,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播困介,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蘸际!你這毒婦竟也來了座哩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤粮彤,失蹤者是張志新(化名)和其女友劉穎根穷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體导坟,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡屿良,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惫周。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尘惧。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖递递,靈堂內(nèi)的尸體忽然破棺而出喷橙,到底是詐尸還是另有隱情,我是刑警寧澤登舞,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布贰逾,位于F島的核電站,受9級特大地震影響菠秒,放射性物質(zhì)發(fā)生泄漏疙剑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一践叠、第九天 我趴在偏房一處隱蔽的房頂上張望言缤。 院中可真熱鬧,春花似錦酵熙、人聲如沸轧简。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哮独。三九已至,卻和暖如春察藐,著一層夾襖步出監(jiān)牢的瞬間皮璧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工分飞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悴务,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像讯檐,于是被迫代替她去往敵國和親羡疗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容