七夕將至,給男朋友寫了個小程序,把他感動哭了,把我可累慘了。
可樂我也不是程序媛專門敲代碼的,雖然也學過,但也僅局限於用pandas處理一下數據的程度,要寫一個界面並且能讓對方直接打開,有點超綱。
但是經過5天的不懈努力,終於也算寫出來了,就長下面這個樣子,其實就是Python裡用tkinter模塊做的一個GUI圖形界面。(文末有原碼獲取方式)
這其實是一個悲傷的故事,請看到最後。
tkinter做的GUI圖形界面登陸界面,輸入帳號密碼點擊照片登陸。
最後一頁就是個愛我嗎的界面,有3個按鈕可以選擇。
選擇【愛】和【很愛】會彈出一樣的界面,不會關機啦,是個迷惑行為,點擊【關機】按鈕整個對話框就全部關閉了,時間緊迫,還沒研究出怎麼真的關機。
實際上就想讓他點【超級愛】這個按鈕,點了以後是如下界面,點擊【好棒,我還要再來億遍】也是個迷惑按鈕,不會真的從頭開始的,禁止套娃!點擊以後同樣對話框全部關閉。
我是在jupyter notebook裡寫的,用tkinter包,這個包的用法也很簡單,對著視頻或者其他參考教程慢慢也就搞定了,當然,我是小白啦,之前也沒有接觸過面向對象的概念,寫個這個程序也把python語法又重新捋了一遍,尤其是class的概念,終於把程序啃下來以後,我發現,這才哪到哪兒啊,後面發布的時候還會遇到各種各樣的bug。
打包發布當然寫好以後這只是一個.py的文件,想要讓對方可以在電腦上直接打開,需要把它打包成一個.exe的可執行文件。
同python裡其他包安裝的方法一樣,用pip方法就可以安裝,假如你的電腦上裝的是Anaconda軟體,那麼可以打開Anaconda Prompt界面。
pip install pyinstaller
就會自動安裝了,安裝成功以後會出現XXXXXsuccessfully字樣,可以測試一下是否真的安裝成功了,可以查看下版本信息,彈出版本信息則說明安裝成功了。
具體的安裝pyinstaller的方法可以參照這個帖子。
pyinstaller打包py文件為exe方法
安裝好pyinstaller報以後,還是在Anaconda Promt命令行裡輸入命令來打包,首先進到你要打包的.py程序所在的文件夾,這是我的路徑,你可以替換成你的路徑。
cd C:\Users\18829\Desktop\cat_dog
然後輸入:
pyinstaller -F -w 7xi_V2.py
-F參數是將程序打包成一個可執行的文件,-w參數是不生成命令行窗口,注意7xi_V2.py是我寫好的要打包的python文件名,這裡替換成你自己的就行。
打包完成後在.py所在文件夾裡會出現幾個文件夾,點開dist文件夾,裡面就是我們打包好的.exe文件了,點擊可以運行即可。
打包完以後,點擊.exe試運行一下,可以運行的話,也不要沾沾自喜,將程序發到別人的電腦上,看能否運行,這才是關鍵。
嘿,結果發現真的無法運行,並彈出如下錯誤彈窗。
搜了很多帖子,發現我打包的時候用的是-F -w,就不會有命令行顯示,所以就沒法知道報錯的原因,這時候就回到打包那步,打包的時候使用默認狀態打包,也就是不加參數的打包,輸入:
pyinstaller 7xi_V2.py
這是默認狀態,將.py代碼放在一個目錄中,這樣後面出錯時就可以輕鬆在命令行中找到問題所在。
以默認狀態打包完以後同樣在dist文件裡把.exe文件發給對方電腦,執行後發現命令行中彈出如下錯誤:
同時我發現我寫這個程序的時候,使用的是絕對路徑,那麼我需要把這個圖片的路徑改成相對路徑,然後再保存,再打包,最後把圖片複製粘貼到打包好的dist文件夾中,再發到其他電腦上,exe文件就可以直接運行了。
這裡因為我只有一張圖片,為了省事,就這樣搞了,實際上如果你的圖片較多,可以去搜索一下圖片打包的方法,可以參考這個帖子:
pyinstaller打包GUI程序時的圖片處理——圖片資源無法顯示問題
好,下面才是正文。
當我把程序寫完,打包好,並且在其他電腦上測試能正常打開後,我突然想要在男票的電腦上測試一下,於是告訴他想用他的mac電腦打開一個exe文件,被他嘲笑了一通:
windows系統才能打開exe文件,mac系統是打不開的。
發現清一色的帖子都是用py2app這個包來打包的,好嘛,打嘛。
於是我在我的windows電腦上用py2app方法來打包,嘿,又報錯了,然後發現,原來是要在mac電腦上用py2app來打包。
這可太難受了,本來我就用不慣mac,現在還要在上面操作一通,硬著頭皮上吧,為了七夕小驚喜。
悄悄進入男票電腦,mac是自帶python 2.7的,但是沒有安裝過那些包,所以要先進入終端,安裝py2app包,按照教程裡的方法3步走。
pip3 install py2pp
cd ~/Desktop/cat_dogApp
py2applet --macke-setup 7xi_v2.py
Round2:在py2applet路徑下執行命令初始化原始的py程序,建立一個setup.py,結果報錯了:
error:py2applet:command not found
說找不到py2applet,在搜索了一大圈帖子後,發現要進入到py2applet所在的路徑再輸入這條命令。
Round3:超綱了py2applet初始化文件成功了,但打包的時候還是出現了問題,又報錯了:
error: [Errno 1] Operation not permitted
百度了一下發現MacOSX El Captain引入的SIP功能會影響py2app創建應用,解決步驟也好複雜,這個帖子裡有寫py2app打包Mac應用程式,不過我還是沒成功,太超綱了。
但是,困難總比方法少,既然我打包不成功,那麼直接在他的mac上能運行.py文件也行啊。
Round4:直接運行python文件然後我就又進入終端運行這個py文件,又雙叒報錯了,提示找不到tkinter模塊,沒有就裝嘛,pip裝它,結果顯示沒有tkinter包……
算鳥,直接在他電腦上裝個windows系統,雙系統總可以打開我之前做好的exe文件了吧。
曲線救國,直接給他買個小米筆記本電腦,再把我的exe文件拷過來得了,真的是困難總比方法少啊!
不是七夕禮物只是一個小程序嗎,怎麼變成了一臺筆記本電腦了???
害,怪不得男朋友感動哭了。
最後,這個小程序的原碼也分享出來,寫的不好,請大神不要嫌棄。
後臺回復「七夕」即可獲得原碼。
還有1天,抓緊搞起來啊兄弟姐妹們!
猜你喜歡:
如何做好描述統計分析
如何進行數據圖形化?
簡單地聊聊統計學
什麼是好的數據指標:精益數據分析
鐵達尼號數據分析